From 8a003adfbdcc0b2110ae107ce20384599b61cf2a Mon Sep 17 00:00:00 2001 From: Sam Levenick Date: Wed, 4 May 2022 15:21:31 -0700 Subject: [PATCH 1/2] Add no empty object AIP --- aip/cloud/24001.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 aip/cloud/24001.md diff --git a/aip/cloud/24001.md b/aip/cloud/24001.md new file mode 100644 index 0000000000..43b33169c5 --- /dev/null +++ b/aip/cloud/24001.md @@ -0,0 +1,66 @@ +--- +id: 24001 +state: draft +created: TBD +placement: + category: gcp +--- + +# Empty Objects + +Fields of type Message **must not** be empty. Empty messages do not have uniform + +## Alternatives + +The presence of empty Messages are sometimes used to indicate that a flag is enabled. Alternatives to empty Messages could include a single boolean field within the Message to signify enablement or an Enum rather than an empty Message. + +### Add Field to Message +For example: +```proto +message EnableMyFeature { +} +``` +Could be modeled instead as: + +```proto +message MyFeature { + bool enabled = 1; +} +``` + +### Move Option to Top-Level Enum + +For a situation where the presence of an empty Message indicates a certain option is being chosen, an alternative is to choose the option via an enum rather than the presence of a particular object. + +For example: +```proto +oneof access_model { + AccessModelFree free = 1 + AccessModelQuota quota = 2 +} + +message AccessModelFree { +} + +message AccessModelQuota { + int32 requests_per_day = 1; +} +``` + +Could be modeled instead as: +```proto +enum AccessModel { + UNSPECIFIED = 0; + FREE = 1; + QUOTA = 1; +} + +message AccessModelQuota { + int32 requests_per_day = 1; +} +``` + + +## Changelog + +- **TBD**: Created From 4d12d8d08fadcd18aeb655b4ad925c5ae3a14e70 Mon Sep 17 00:00:00 2001 From: Sam Levenick Date: Tue, 25 Oct 2022 18:46:22 -0700 Subject: [PATCH 2/2] Rename 25001 --- aip/cloud/{24001.md => 25001.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename aip/cloud/{24001.md => 25001.md} (99%) diff --git a/aip/cloud/24001.md b/aip/cloud/25001.md similarity index 99% rename from aip/cloud/24001.md rename to aip/cloud/25001.md index 43b33169c5..21bf86efda 100644 --- a/aip/cloud/24001.md +++ b/aip/cloud/25001.md @@ -1,5 +1,5 @@ --- -id: 24001 +id: 25001 state: draft created: TBD placement: