1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.api; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/descriptor.proto"; 20*d5c09012SAndroid Build Coastguard Worker 21*d5c09012SAndroid Build Coastguard Workeroption cc_enable_arenas = true; 22*d5c09012SAndroid Build Coastguard Workeroption go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; 23*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 24*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "ResourceProto"; 25*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.api"; 26*d5c09012SAndroid Build Coastguard Workeroption objc_class_prefix = "GAPI"; 27*d5c09012SAndroid Build Coastguard Worker 28*d5c09012SAndroid Build Coastguard Workerextend google.protobuf.FieldOptions { 29*d5c09012SAndroid Build Coastguard Worker // An annotation that describes a resource reference, see 30*d5c09012SAndroid Build Coastguard Worker // [ResourceReference][]. 31*d5c09012SAndroid Build Coastguard Worker google.api.ResourceReference resource_reference = 1055; 32*d5c09012SAndroid Build Coastguard Worker} 33*d5c09012SAndroid Build Coastguard Worker 34*d5c09012SAndroid Build Coastguard Workerextend google.protobuf.FileOptions { 35*d5c09012SAndroid Build Coastguard Worker // An annotation that describes a resource definition without a corresponding 36*d5c09012SAndroid Build Coastguard Worker // message; see [ResourceDescriptor][]. 37*d5c09012SAndroid Build Coastguard Worker repeated google.api.ResourceDescriptor resource_definition = 1053; 38*d5c09012SAndroid Build Coastguard Worker} 39*d5c09012SAndroid Build Coastguard Worker 40*d5c09012SAndroid Build Coastguard Workerextend google.protobuf.MessageOptions { 41*d5c09012SAndroid Build Coastguard Worker // An annotation that describes a resource definition, see 42*d5c09012SAndroid Build Coastguard Worker // [ResourceDescriptor][]. 43*d5c09012SAndroid Build Coastguard Worker google.api.ResourceDescriptor resource = 1053; 44*d5c09012SAndroid Build Coastguard Worker} 45*d5c09012SAndroid Build Coastguard Worker 46*d5c09012SAndroid Build Coastguard Worker// A simple descriptor of a resource type. 47*d5c09012SAndroid Build Coastguard Worker// 48*d5c09012SAndroid Build Coastguard Worker// ResourceDescriptor annotates a resource message (either by means of a 49*d5c09012SAndroid Build Coastguard Worker// protobuf annotation or use in the service config), and associates the 50*d5c09012SAndroid Build Coastguard Worker// resource's schema, the resource type, and the pattern of the resource name. 51*d5c09012SAndroid Build Coastguard Worker// 52*d5c09012SAndroid Build Coastguard Worker// Example: 53*d5c09012SAndroid Build Coastguard Worker// 54*d5c09012SAndroid Build Coastguard Worker// message Topic { 55*d5c09012SAndroid Build Coastguard Worker// // Indicates this message defines a resource schema. 56*d5c09012SAndroid Build Coastguard Worker// // Declares the resource type in the format of {service}/{kind}. 57*d5c09012SAndroid Build Coastguard Worker// // For Kubernetes resources, the format is {api group}/{kind}. 58*d5c09012SAndroid Build Coastguard Worker// option (google.api.resource) = { 59*d5c09012SAndroid Build Coastguard Worker// type: "pubsub.googleapis.com/Topic" 60*d5c09012SAndroid Build Coastguard Worker// pattern: "projects/{project}/topics/{topic}" 61*d5c09012SAndroid Build Coastguard Worker// }; 62*d5c09012SAndroid Build Coastguard Worker// } 63*d5c09012SAndroid Build Coastguard Worker// 64*d5c09012SAndroid Build Coastguard Worker// The ResourceDescriptor Yaml config will look like: 65*d5c09012SAndroid Build Coastguard Worker// 66*d5c09012SAndroid Build Coastguard Worker// resources: 67*d5c09012SAndroid Build Coastguard Worker// - type: "pubsub.googleapis.com/Topic" 68*d5c09012SAndroid Build Coastguard Worker// pattern: "projects/{project}/topics/{topic}" 69*d5c09012SAndroid Build Coastguard Worker// 70*d5c09012SAndroid Build Coastguard Worker// Sometimes, resources have multiple patterns, typically because they can 71*d5c09012SAndroid Build Coastguard Worker// live under multiple parents. 72*d5c09012SAndroid Build Coastguard Worker// 73*d5c09012SAndroid Build Coastguard Worker// Example: 74*d5c09012SAndroid Build Coastguard Worker// 75*d5c09012SAndroid Build Coastguard Worker// message LogEntry { 76*d5c09012SAndroid Build Coastguard Worker// option (google.api.resource) = { 77*d5c09012SAndroid Build Coastguard Worker// type: "logging.googleapis.com/LogEntry" 78*d5c09012SAndroid Build Coastguard Worker// pattern: "projects/{project}/logs/{log}" 79*d5c09012SAndroid Build Coastguard Worker// pattern: "folders/{folder}/logs/{log}" 80*d5c09012SAndroid Build Coastguard Worker// pattern: "organizations/{organization}/logs/{log}" 81*d5c09012SAndroid Build Coastguard Worker// pattern: "billingAccounts/{billing_account}/logs/{log}" 82*d5c09012SAndroid Build Coastguard Worker// }; 83*d5c09012SAndroid Build Coastguard Worker// } 84*d5c09012SAndroid Build Coastguard Worker// 85*d5c09012SAndroid Build Coastguard Worker// The ResourceDescriptor Yaml config will look like: 86*d5c09012SAndroid Build Coastguard Worker// 87*d5c09012SAndroid Build Coastguard Worker// resources: 88*d5c09012SAndroid Build Coastguard Worker// - type: 'logging.googleapis.com/LogEntry' 89*d5c09012SAndroid Build Coastguard Worker// pattern: "projects/{project}/logs/{log}" 90*d5c09012SAndroid Build Coastguard Worker// pattern: "folders/{folder}/logs/{log}" 91*d5c09012SAndroid Build Coastguard Worker// pattern: "organizations/{organization}/logs/{log}" 92*d5c09012SAndroid Build Coastguard Worker// pattern: "billingAccounts/{billing_account}/logs/{log}" 93*d5c09012SAndroid Build Coastguard Workermessage ResourceDescriptor { 94*d5c09012SAndroid Build Coastguard Worker // A description of the historical or future-looking state of the 95*d5c09012SAndroid Build Coastguard Worker // resource pattern. 96*d5c09012SAndroid Build Coastguard Worker enum History { 97*d5c09012SAndroid Build Coastguard Worker // The "unset" value. 98*d5c09012SAndroid Build Coastguard Worker HISTORY_UNSPECIFIED = 0; 99*d5c09012SAndroid Build Coastguard Worker 100*d5c09012SAndroid Build Coastguard Worker // The resource originally had one pattern and launched as such, and 101*d5c09012SAndroid Build Coastguard Worker // additional patterns were added later. 102*d5c09012SAndroid Build Coastguard Worker ORIGINALLY_SINGLE_PATTERN = 1; 103*d5c09012SAndroid Build Coastguard Worker 104*d5c09012SAndroid Build Coastguard Worker // The resource has one pattern, but the API owner expects to add more 105*d5c09012SAndroid Build Coastguard Worker // later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents 106*d5c09012SAndroid Build Coastguard Worker // that from being necessary once there are multiple patterns.) 107*d5c09012SAndroid Build Coastguard Worker FUTURE_MULTI_PATTERN = 2; 108*d5c09012SAndroid Build Coastguard Worker } 109*d5c09012SAndroid Build Coastguard Worker 110*d5c09012SAndroid Build Coastguard Worker // A flag representing a specific style that a resource claims to conform to. 111*d5c09012SAndroid Build Coastguard Worker enum Style { 112*d5c09012SAndroid Build Coastguard Worker // The unspecified value. Do not use. 113*d5c09012SAndroid Build Coastguard Worker STYLE_UNSPECIFIED = 0; 114*d5c09012SAndroid Build Coastguard Worker 115*d5c09012SAndroid Build Coastguard Worker // This resource is intended to be "declarative-friendly". 116*d5c09012SAndroid Build Coastguard Worker // 117*d5c09012SAndroid Build Coastguard Worker // Declarative-friendly resources must be more strictly consistent, and 118*d5c09012SAndroid Build Coastguard Worker // setting this to true communicates to tools that this resource should 119*d5c09012SAndroid Build Coastguard Worker // adhere to declarative-friendly expectations. 120*d5c09012SAndroid Build Coastguard Worker // 121*d5c09012SAndroid Build Coastguard Worker // Note: This is used by the API linter (linter.aip.dev) to enable 122*d5c09012SAndroid Build Coastguard Worker // additional checks. 123*d5c09012SAndroid Build Coastguard Worker DECLARATIVE_FRIENDLY = 1; 124*d5c09012SAndroid Build Coastguard Worker } 125*d5c09012SAndroid Build Coastguard Worker 126*d5c09012SAndroid Build Coastguard Worker // The resource type. It must be in the format of 127*d5c09012SAndroid Build Coastguard Worker // {service_name}/{resource_type_kind}. The `resource_type_kind` must be 128*d5c09012SAndroid Build Coastguard Worker // singular and must not include version numbers. 129*d5c09012SAndroid Build Coastguard Worker // 130*d5c09012SAndroid Build Coastguard Worker // Example: `storage.googleapis.com/Bucket` 131*d5c09012SAndroid Build Coastguard Worker // 132*d5c09012SAndroid Build Coastguard Worker // The value of the resource_type_kind must follow the regular expression 133*d5c09012SAndroid Build Coastguard Worker // /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and 134*d5c09012SAndroid Build Coastguard Worker // should use PascalCase (UpperCamelCase). The maximum number of 135*d5c09012SAndroid Build Coastguard Worker // characters allowed for the `resource_type_kind` is 100. 136*d5c09012SAndroid Build Coastguard Worker string type = 1; 137*d5c09012SAndroid Build Coastguard Worker 138*d5c09012SAndroid Build Coastguard Worker // Optional. The relative resource name pattern associated with this resource 139*d5c09012SAndroid Build Coastguard Worker // type. The DNS prefix of the full resource name shouldn't be specified here. 140*d5c09012SAndroid Build Coastguard Worker // 141*d5c09012SAndroid Build Coastguard Worker // The path pattern must follow the syntax, which aligns with HTTP binding 142*d5c09012SAndroid Build Coastguard Worker // syntax: 143*d5c09012SAndroid Build Coastguard Worker // 144*d5c09012SAndroid Build Coastguard Worker // Template = Segment { "/" Segment } ; 145*d5c09012SAndroid Build Coastguard Worker // Segment = LITERAL | Variable ; 146*d5c09012SAndroid Build Coastguard Worker // Variable = "{" LITERAL "}" ; 147*d5c09012SAndroid Build Coastguard Worker // 148*d5c09012SAndroid Build Coastguard Worker // Examples: 149*d5c09012SAndroid Build Coastguard Worker // 150*d5c09012SAndroid Build Coastguard Worker // - "projects/{project}/topics/{topic}" 151*d5c09012SAndroid Build Coastguard Worker // - "projects/{project}/knowledgeBases/{knowledge_base}" 152*d5c09012SAndroid Build Coastguard Worker // 153*d5c09012SAndroid Build Coastguard Worker // The components in braces correspond to the IDs for each resource in the 154*d5c09012SAndroid Build Coastguard Worker // hierarchy. It is expected that, if multiple patterns are provided, 155*d5c09012SAndroid Build Coastguard Worker // the same component name (e.g. "project") refers to IDs of the same 156*d5c09012SAndroid Build Coastguard Worker // type of resource. 157*d5c09012SAndroid Build Coastguard Worker repeated string pattern = 2; 158*d5c09012SAndroid Build Coastguard Worker 159*d5c09012SAndroid Build Coastguard Worker // Optional. The field on the resource that designates the resource name 160*d5c09012SAndroid Build Coastguard Worker // field. If omitted, this is assumed to be "name". 161*d5c09012SAndroid Build Coastguard Worker string name_field = 3; 162*d5c09012SAndroid Build Coastguard Worker 163*d5c09012SAndroid Build Coastguard Worker // Optional. The historical or future-looking state of the resource pattern. 164*d5c09012SAndroid Build Coastguard Worker // 165*d5c09012SAndroid Build Coastguard Worker // Example: 166*d5c09012SAndroid Build Coastguard Worker // 167*d5c09012SAndroid Build Coastguard Worker // // The InspectTemplate message originally only supported resource 168*d5c09012SAndroid Build Coastguard Worker // // names with organization, and project was added later. 169*d5c09012SAndroid Build Coastguard Worker // message InspectTemplate { 170*d5c09012SAndroid Build Coastguard Worker // option (google.api.resource) = { 171*d5c09012SAndroid Build Coastguard Worker // type: "dlp.googleapis.com/InspectTemplate" 172*d5c09012SAndroid Build Coastguard Worker // pattern: 173*d5c09012SAndroid Build Coastguard Worker // "organizations/{organization}/inspectTemplates/{inspect_template}" 174*d5c09012SAndroid Build Coastguard Worker // pattern: "projects/{project}/inspectTemplates/{inspect_template}" 175*d5c09012SAndroid Build Coastguard Worker // history: ORIGINALLY_SINGLE_PATTERN 176*d5c09012SAndroid Build Coastguard Worker // }; 177*d5c09012SAndroid Build Coastguard Worker // } 178*d5c09012SAndroid Build Coastguard Worker History history = 4; 179*d5c09012SAndroid Build Coastguard Worker 180*d5c09012SAndroid Build Coastguard Worker // The plural name used in the resource name and permission names, such as 181*d5c09012SAndroid Build Coastguard Worker // 'projects' for the resource name of 'projects/{project}' and the permission 182*d5c09012SAndroid Build Coastguard Worker // name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same 183*d5c09012SAndroid Build Coastguard Worker // concept of the `plural` field in k8s CRD spec 184*d5c09012SAndroid Build Coastguard Worker // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ 185*d5c09012SAndroid Build Coastguard Worker // 186*d5c09012SAndroid Build Coastguard Worker // Note: The plural form is required even for singleton resources. See 187*d5c09012SAndroid Build Coastguard Worker // https://aip.dev/156 188*d5c09012SAndroid Build Coastguard Worker string plural = 5; 189*d5c09012SAndroid Build Coastguard Worker 190*d5c09012SAndroid Build Coastguard Worker // The same concept of the `singular` field in k8s CRD spec 191*d5c09012SAndroid Build Coastguard Worker // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ 192*d5c09012SAndroid Build Coastguard Worker // Such as "project" for the `resourcemanager.googleapis.com/Project` type. 193*d5c09012SAndroid Build Coastguard Worker string singular = 6; 194*d5c09012SAndroid Build Coastguard Worker 195*d5c09012SAndroid Build Coastguard Worker // Style flag(s) for this resource. 196*d5c09012SAndroid Build Coastguard Worker // These indicate that a resource is expected to conform to a given 197*d5c09012SAndroid Build Coastguard Worker // style. See the specific style flags for additional information. 198*d5c09012SAndroid Build Coastguard Worker repeated Style style = 10; 199*d5c09012SAndroid Build Coastguard Worker} 200*d5c09012SAndroid Build Coastguard Worker 201*d5c09012SAndroid Build Coastguard Worker// Defines a proto annotation that describes a string field that refers to 202*d5c09012SAndroid Build Coastguard Worker// an API resource. 203*d5c09012SAndroid Build Coastguard Workermessage ResourceReference { 204*d5c09012SAndroid Build Coastguard Worker // The resource type that the annotated field references. 205*d5c09012SAndroid Build Coastguard Worker // 206*d5c09012SAndroid Build Coastguard Worker // Example: 207*d5c09012SAndroid Build Coastguard Worker // 208*d5c09012SAndroid Build Coastguard Worker // message Subscription { 209*d5c09012SAndroid Build Coastguard Worker // string topic = 2 [(google.api.resource_reference) = { 210*d5c09012SAndroid Build Coastguard Worker // type: "pubsub.googleapis.com/Topic" 211*d5c09012SAndroid Build Coastguard Worker // }]; 212*d5c09012SAndroid Build Coastguard Worker // } 213*d5c09012SAndroid Build Coastguard Worker // 214*d5c09012SAndroid Build Coastguard Worker // Occasionally, a field may reference an arbitrary resource. In this case, 215*d5c09012SAndroid Build Coastguard Worker // APIs use the special value * in their resource reference. 216*d5c09012SAndroid Build Coastguard Worker // 217*d5c09012SAndroid Build Coastguard Worker // Example: 218*d5c09012SAndroid Build Coastguard Worker // 219*d5c09012SAndroid Build Coastguard Worker // message GetIamPolicyRequest { 220*d5c09012SAndroid Build Coastguard Worker // string resource = 2 [(google.api.resource_reference) = { 221*d5c09012SAndroid Build Coastguard Worker // type: "*" 222*d5c09012SAndroid Build Coastguard Worker // }]; 223*d5c09012SAndroid Build Coastguard Worker // } 224*d5c09012SAndroid Build Coastguard Worker string type = 1; 225*d5c09012SAndroid Build Coastguard Worker 226*d5c09012SAndroid Build Coastguard Worker // The resource type of a child collection that the annotated field 227*d5c09012SAndroid Build Coastguard Worker // references. This is useful for annotating the `parent` field that 228*d5c09012SAndroid Build Coastguard Worker // doesn't have a fixed resource type. 229*d5c09012SAndroid Build Coastguard Worker // 230*d5c09012SAndroid Build Coastguard Worker // Example: 231*d5c09012SAndroid Build Coastguard Worker // 232*d5c09012SAndroid Build Coastguard Worker // message ListLogEntriesRequest { 233*d5c09012SAndroid Build Coastguard Worker // string parent = 1 [(google.api.resource_reference) = { 234*d5c09012SAndroid Build Coastguard Worker // child_type: "logging.googleapis.com/LogEntry" 235*d5c09012SAndroid Build Coastguard Worker // }; 236*d5c09012SAndroid Build Coastguard Worker // } 237*d5c09012SAndroid Build Coastguard Worker string child_type = 2; 238*d5c09012SAndroid Build Coastguard Worker} 239