From cfb49278d1ced8bc0b53f9864a4d2c8ded17897d Mon Sep 17 00:00:00 2001 From: Alex Stephen Date: Wed, 17 Apr 2024 13:52:34 -0700 Subject: [PATCH 1/4] add field behavior proto --- proto/aep-api/aep/api/field_behavior.proto | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 proto/aep-api/aep/api/field_behavior.proto diff --git a/proto/aep-api/aep/api/field_behavior.proto b/proto/aep-api/aep/api/field_behavior.proto new file mode 100644 index 0000000..a4bc129 --- /dev/null +++ b/proto/aep-api/aep/api/field_behavior.proto @@ -0,0 +1,90 @@ +syntax = "proto3"; + +package aep.api; + +import "aep/protobuf/descriptor.proto"; + +option go_package = "aep.dev/api"; +option java_multiple_files = true; +option java_outer_classname = "FieldBehaviorProto"; +option java_package = "com.aep.api"; +option objc_class_prefix = "AEP"; + +extend aep.protobuf.FieldOptions { + // A designation of a specific field behavior (required, output only, etc.) + // in protobuf messages. + // + // Examples: + // + // string name = 1 [(aep.api.field_behavior) = REQUIRED]; + // State state = 1 [(aep.api.field_behavior) = OUTPUT_ONLY]; + // aep.protobuf.Duration ttl = 1 + // [(aep.api.field_behavior) = INPUT_ONLY]; + // aep.protobuf.Timestamp expire_time = 1 + // [(aep.api.field_behavior) = OUTPUT_ONLY, + // (aep.api.field_behavior) = IMMUTABLE]; + repeated aep.api.FieldBehavior field_behavior = 1052 [packed = false]; +} + +// An indicator of the behavior of a given field (for example, that a field +// is required in requests, or given as output but ignored as input). +// This **does not** change the behavior in protocol buffers itself; it only +// denotes the behavior and may affect how API tooling handles the field. +// +// Note: This enum **may** receive new values in the future. +enum FieldBehavior { + // Conventional default for enums. Do not use this. + FIELD_BEHAVIOR_UNSPECIFIED = 0; + + // Specifically denotes a field as optional. + // While all fields in protocol buffers are optional, this may be specified + // for emphasis if appropriate. + OPTIONAL = 1; + + // Denotes a field as required. + // This indicates that the field **must** be provided as part of the request, + // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). + REQUIRED = 2; + + // Denotes a field as output only. + // This indicates that the field is provided in responses, but including the + // field in a request does nothing (the server *must* ignore it and + // *must not* throw an error as a result of the field's presence). + OUTPUT_ONLY = 3; + + // Denotes a field as input only. + // This indicates that the field is provided in requests, and the + // corresponding field is not included in output. + INPUT_ONLY = 4; + + // Denotes a field as immutable. + // This indicates that the field may be set once in a request to create a + // resource, but may not be changed thereafter. + IMMUTABLE = 5; + + // Denotes that a (repeated) field is an unordered list. + // This indicates that the service may provide the elements of the list + // in any arbitrary order, rather than the order the user originally + // provided. Additionally, the list's order may or may not be stable. + UNORDERED_LIST = 6; + + // Denotes that this field returns a non-empty default value if not set. + // This indicates that if the user provides the empty value in a request, + // a non-empty value will be returned. The user will not be aware of what + // non-empty value to expect. + NON_EMPTY_DEFAULT = 7; + + // Denotes that the field in a resource (a message annotated with + // aep.api.resource) is used in the resource name to uniquely identify the + // resource. For AEP-compliant APIs, this should only be applied to the + // `name` field on the resource. + // + // This behavior should not be applied to references to other resources within + // the message. + // + // The identifier field of resources often have different field behavior + // depending on the request it is embedded in (e.g. for Create methods name + // is optional and unused, while for Update methods it is required). Instead + // of method-specific annotations, only `IDENTIFIER` is required. + IDENTIFIER = 8; +} \ No newline at end of file From 007ac3418550478ab8758852c09b4a90e44597db Mon Sep 17 00:00:00 2001 From: Alex Stephen Date: Wed, 17 Apr 2024 13:54:23 -0700 Subject: [PATCH 2/4] fix --- proto/aep-api/aep/api/field_behavior.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/aep-api/aep/api/field_behavior.proto b/proto/aep-api/aep/api/field_behavior.proto index a4bc129..33ac993 100644 --- a/proto/aep-api/aep/api/field_behavior.proto +++ b/proto/aep-api/aep/api/field_behavior.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package aep.api; -import "aep/protobuf/descriptor.proto"; +import "google/protobuf/descriptor.proto"; option go_package = "aep.dev/api"; option java_multiple_files = true; From 26e4524993a3c77ef1591914e864effadfc67039 Mon Sep 17 00:00:00 2001 From: Alex Stephen Date: Wed, 17 Jul 2024 13:40:23 -0700 Subject: [PATCH 3/4] idempotency key changes --- proto/aep-api/aep/api/idempotency_key.proto | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/proto/aep-api/aep/api/idempotency_key.proto b/proto/aep-api/aep/api/idempotency_key.proto index 61d3efc..fd8cc71 100644 --- a/proto/aep-api/aep/api/idempotency_key.proto +++ b/proto/aep-api/aep/api/idempotency_key.proto @@ -9,7 +9,7 @@ option java_outer_classname = "IdempotencyKeyProto"; option java_package = "dev.aep.api"; option objc_class_prefix = "AEP"; -import "google/api/field_behavior.proto"; +import "aep/api/field_behavior.proto"; import "google/protobuf/descriptor.proto"; import "google/protobuf/timestamp.proto"; @@ -21,7 +21,7 @@ import "google/protobuf/timestamp.proto"; message IdempotencyKey { // The unique key to use for idempotency. // string key = 1; - string key = 1 [(google.api.field_behavior) = REQUIRED]; + string key = 1 [(aep.api.field_behavior) = REQUIRED]; // The timestamp at which the first request was sent. // @@ -29,5 +29,5 @@ message IdempotencyKey { // (which *may* exceed the annotated minimum lifetime), the server *must* // return an error. google.protobuf.Timestamp first_sent = 2 - [(google.api.field_behavior) = REQUIRED]; + [(aep.api.field_behavior) = REQUIRED]; } \ No newline at end of file From 487257d93de59621d13c4e805b2df25beda5e772 Mon Sep 17 00:00:00 2001 From: Alex Stephen Date: Wed, 17 Jul 2024 13:44:20 -0700 Subject: [PATCH 4/4] changes --- proto/aep-api/aep/api/field_behavior.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/aep-api/aep/api/field_behavior.proto b/proto/aep-api/aep/api/field_behavior.proto index 33ac993..6e26608 100644 --- a/proto/aep-api/aep/api/field_behavior.proto +++ b/proto/aep-api/aep/api/field_behavior.proto @@ -10,7 +10,7 @@ option java_outer_classname = "FieldBehaviorProto"; option java_package = "com.aep.api"; option objc_class_prefix = "AEP"; -extend aep.protobuf.FieldOptions { +extend google.protobuf.FieldOptions { // A designation of a specific field behavior (required, output only, etc.) // in protobuf messages. //