diff --git a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight.proto b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight.proto index 690ded1d7e08..97da81c7af6e 100644 --- a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight.proto +++ b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight.proto @@ -1,4 +1,4 @@ -// Copyright 2025 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ syntax = "proto3"; package google.cloud.recommender.v1; +import "google/api/field_behavior.proto"; import "google/api/resource.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; @@ -95,8 +96,8 @@ message Insight { string recommendation = 1; } - // Name of the insight. - string name = 1; + // Identifier. Name of the insight. + string name = 1 [(google.api.field_behavior) = IDENTIFIER]; // Free-form human readable summary in English. The maximum length is 500 // characters. diff --git a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight_type_config.proto b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight_type_config.proto index fe2d65022728..6f540acdb229 100644 --- a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight_type_config.proto +++ b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight_type_config.proto @@ -1,4 +1,4 @@ -// Copyright 2025 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -37,10 +37,10 @@ message InsightTypeConfig { pattern: "billingAccounts/{billing_account}/locations/{location}/insightTypes/{insight_type}/config" }; - // Name of insight type config. + // Identifier. Name of insight type config. // Eg, // projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/config - string name = 1; + string name = 1 [(google.api.field_behavior) = IDENTIFIER]; // InsightTypeGenerationConfig which configures the generation of // insights for this insight type. diff --git a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommendation.proto b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommendation.proto index 28baac67e420..441aad5c2d91 100644 --- a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommendation.proto +++ b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommendation.proto @@ -1,4 +1,4 @@ -// Copyright 2025 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ syntax = "proto3"; package google.cloud.recommender.v1; +import "google/api/field_behavior.proto"; import "google/api/resource.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; @@ -71,8 +72,8 @@ message Recommendation { string insight = 1; } - // Name of recommendation. - string name = 1; + // Identifier. Name of recommendation. + string name = 1 [(google.api.field_behavior) = IDENTIFIER]; // Free-form human readable summary in English. The maximum length is 500 // characters. @@ -123,6 +124,9 @@ message Recommendation { // exclusive group. This means that only one recommendation within the group // is suggested to be applied. string xor_group_id = 18; + + // Fully qualified resource names that this recommendation is targeting. + repeated string target_resources = 19; } // Contains what resources are changing and how they are changing. @@ -236,6 +240,7 @@ message Operation { // Contains various matching options for values for a GCP resource field. message ValueMatcher { + // To be used for full regex matching. oneof match_variant { // To be used for full regex matching. The regular expression is using the // Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be @@ -346,6 +351,9 @@ message Impact { // Use with CategoryType.RELIABILITY ReliabilityProjection reliability_projection = 103; } + + // The service that this impact is associated with. + string service = 3; } // Information for state. Contains state and metadata. diff --git a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommender_config.proto b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommender_config.proto index f1b662753048..c64e7035c99a 100644 --- a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommender_config.proto +++ b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommender_config.proto @@ -1,4 +1,4 @@ -// Copyright 2025 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -37,10 +37,10 @@ message RecommenderConfig { pattern: "billingAccounts/{billing_account}/locations/{location}/recommenders/{recommender}/config" }; - // Name of recommender config. + // Identifier. Name of recommender config. // Eg, // projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/config - string name = 1; + string name = 1 [(google.api.field_behavior) = IDENTIFIER]; // RecommenderGenerationConfig which configures the Generation of // recommendations for this recommender. diff --git a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommender_service.proto b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommender_service.proto index 05bbba213ca3..a5b31ef6852d 100644 --- a/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommender_service.proto +++ b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/recommender_service.proto @@ -1,4 +1,4 @@ -// Copyright 2025 Google LLC +// Copyright 2026 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-recommender/protos/protos.d.ts b/packages/google-cloud-recommender/protos/protos.d.ts index ad961b63dd4c..c8de95715ee6 100644 --- a/packages/google-cloud-recommender/protos/protos.d.ts +++ b/packages/google-cloud-recommender/protos/protos.d.ts @@ -691,6 +691,9 @@ export namespace google { /** Recommendation xorGroupId */ xorGroupId?: (string|null); + + /** Recommendation targetResources */ + targetResources?: (string[]|null); } /** Represents a Recommendation. */ @@ -738,6 +741,9 @@ export namespace google { /** Recommendation xorGroupId. */ public xorGroupId: string; + /** Recommendation targetResources. */ + public targetResources: string[]; + /** * Creates a new Recommendation instance using the specified properties. * @param [properties] Properties to set @@ -1819,6 +1825,9 @@ export namespace google { /** Impact reliabilityProjection */ reliabilityProjection?: (google.cloud.recommender.v1.IReliabilityProjection|null); + + /** Impact service */ + service?: (string|null); } /** Represents an Impact. */ @@ -1845,6 +1854,9 @@ export namespace google { /** Impact reliabilityProjection. */ public reliabilityProjection?: (google.cloud.recommender.v1.IReliabilityProjection|null); + /** Impact service. */ + public service: string; + /** Impact projection. */ public projection?: ("costProjection"|"securityProjection"|"sustainabilityProjection"|"reliabilityProjection"); @@ -8707,6 +8719,19 @@ export namespace google { /** Namespace api. */ namespace api { + /** FieldBehavior enum. */ + enum FieldBehavior { + FIELD_BEHAVIOR_UNSPECIFIED = 0, + OPTIONAL = 1, + REQUIRED = 2, + OUTPUT_ONLY = 3, + INPUT_ONLY = 4, + IMMUTABLE = 5, + UNORDERED_LIST = 6, + NON_EMPTY_DEFAULT = 7, + IDENTIFIER = 8 + } + /** Properties of a ResourceDescriptor. */ interface IResourceDescriptor { @@ -8959,19 +8984,6 @@ export namespace google { public static getTypeUrl(typeUrlPrefix?: string): string; } - /** FieldBehavior enum. */ - enum FieldBehavior { - FIELD_BEHAVIOR_UNSPECIFIED = 0, - OPTIONAL = 1, - REQUIRED = 2, - OUTPUT_ONLY = 3, - INPUT_ONLY = 4, - IMMUTABLE = 5, - UNORDERED_LIST = 6, - NON_EMPTY_DEFAULT = 7, - IDENTIFIER = 8 - } - /** Properties of a Http. */ interface IHttp { @@ -13248,11 +13260,11 @@ export namespace google { /** FieldOptions uninterpretedOption */ uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); - /** FieldOptions .google.api.resourceReference */ - ".google.api.resourceReference"?: (google.api.IResourceReference|null); - /** FieldOptions .google.api.fieldBehavior */ ".google.api.fieldBehavior"?: (google.api.FieldBehavior[]|null); + + /** FieldOptions .google.api.resourceReference */ + ".google.api.resourceReference"?: (google.api.IResourceReference|null); } /** Represents a FieldOptions. */ diff --git a/packages/google-cloud-recommender/protos/protos.js b/packages/google-cloud-recommender/protos/protos.js index ec5c6528a48f..b26b89befa43 100644 --- a/packages/google-cloud-recommender/protos/protos.js +++ b/packages/google-cloud-recommender/protos/protos.js @@ -1840,6 +1840,7 @@ * @property {string|null} [etag] Recommendation etag * @property {Array.|null} [associatedInsights] Recommendation associatedInsights * @property {string|null} [xorGroupId] Recommendation xorGroupId + * @property {Array.|null} [targetResources] Recommendation targetResources */ /** @@ -1853,6 +1854,7 @@ function Recommendation(properties) { this.additionalImpact = []; this.associatedInsights = []; + this.targetResources = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -1955,6 +1957,14 @@ */ Recommendation.prototype.xorGroupId = ""; + /** + * Recommendation targetResources. + * @member {Array.} targetResources + * @memberof google.cloud.recommender.v1.Recommendation + * @instance + */ + Recommendation.prototype.targetResources = $util.emptyArray; + /** * Creates a new Recommendation instance using the specified properties. * @function create @@ -2005,6 +2015,9 @@ writer.uint32(/* id 17, wireType 0 =*/136).int32(message.priority); if (message.xorGroupId != null && Object.hasOwnProperty.call(message, "xorGroupId")) writer.uint32(/* id 18, wireType 2 =*/146).string(message.xorGroupId); + if (message.targetResources != null && message.targetResources.length) + for (var i = 0; i < message.targetResources.length; ++i) + writer.uint32(/* id 19, wireType 2 =*/154).string(message.targetResources[i]); return writer; }; @@ -2093,6 +2106,12 @@ message.xorGroupId = reader.string(); break; } + case 19: { + if (!(message.targetResources && message.targetResources.length)) + message.targetResources = []; + message.targetResources.push(reader.string()); + break; + } default: reader.skipType(tag & 7); break; @@ -2192,6 +2211,13 @@ if (message.xorGroupId != null && message.hasOwnProperty("xorGroupId")) if (!$util.isString(message.xorGroupId)) return "xorGroupId: string expected"; + if (message.targetResources != null && message.hasOwnProperty("targetResources")) { + if (!Array.isArray(message.targetResources)) + return "targetResources: array expected"; + for (var i = 0; i < message.targetResources.length; ++i) + if (!$util.isString(message.targetResources[i])) + return "targetResources: string[] expected"; + } return null; }; @@ -2285,6 +2311,13 @@ } if (object.xorGroupId != null) message.xorGroupId = String(object.xorGroupId); + if (object.targetResources) { + if (!Array.isArray(object.targetResources)) + throw TypeError(".google.cloud.recommender.v1.Recommendation.targetResources: array expected"); + message.targetResources = []; + for (var i = 0; i < object.targetResources.length; ++i) + message.targetResources[i] = String(object.targetResources[i]); + } return message; }; @@ -2304,6 +2337,7 @@ if (options.arrays || options.defaults) { object.additionalImpact = []; object.associatedInsights = []; + object.targetResources = []; } if (options.defaults) { object.name = ""; @@ -2347,6 +2381,11 @@ object.priority = options.enums === String ? $root.google.cloud.recommender.v1.Recommendation.Priority[message.priority] === undefined ? message.priority : $root.google.cloud.recommender.v1.Recommendation.Priority[message.priority] : message.priority; if (message.xorGroupId != null && message.hasOwnProperty("xorGroupId")) object.xorGroupId = message.xorGroupId; + if (message.targetResources && message.targetResources.length) { + object.targetResources = []; + for (var j = 0; j < message.targetResources.length; ++j) + object.targetResources[j] = message.targetResources[j]; + } return object; }; @@ -4870,6 +4909,7 @@ * @property {google.cloud.recommender.v1.ISecurityProjection|null} [securityProjection] Impact securityProjection * @property {google.cloud.recommender.v1.ISustainabilityProjection|null} [sustainabilityProjection] Impact sustainabilityProjection * @property {google.cloud.recommender.v1.IReliabilityProjection|null} [reliabilityProjection] Impact reliabilityProjection + * @property {string|null} [service] Impact service */ /** @@ -4927,6 +4967,14 @@ */ Impact.prototype.reliabilityProjection = null; + /** + * Impact service. + * @member {string} service + * @memberof google.cloud.recommender.v1.Impact + * @instance + */ + Impact.prototype.service = ""; + // OneOf field names bound to virtual getters and setters var $oneOfFields; @@ -4967,6 +5015,8 @@ writer = $Writer.create(); if (message.category != null && Object.hasOwnProperty.call(message, "category")) writer.uint32(/* id 1, wireType 0 =*/8).int32(message.category); + if (message.service != null && Object.hasOwnProperty.call(message, "service")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.service); if (message.costProjection != null && Object.hasOwnProperty.call(message, "costProjection")) $root.google.cloud.recommender.v1.CostProjection.encode(message.costProjection, writer.uint32(/* id 100, wireType 2 =*/802).fork()).ldelim(); if (message.securityProjection != null && Object.hasOwnProperty.call(message, "securityProjection")) @@ -5031,6 +5081,10 @@ message.reliabilityProjection = $root.google.cloud.recommender.v1.ReliabilityProjection.decode(reader, reader.uint32()); break; } + case 3: { + message.service = reader.string(); + break; + } default: reader.skipType(tag & 7); break; @@ -5118,6 +5172,9 @@ return "reliabilityProjection." + error; } } + if (message.service != null && message.hasOwnProperty("service")) + if (!$util.isString(message.service)) + return "service: string expected"; return null; }; @@ -5189,6 +5246,8 @@ throw TypeError(".google.cloud.recommender.v1.Impact.reliabilityProjection: object expected"); message.reliabilityProjection = $root.google.cloud.recommender.v1.ReliabilityProjection.fromObject(object.reliabilityProjection); } + if (object.service != null) + message.service = String(object.service); return message; }; @@ -5205,10 +5264,14 @@ if (!options) options = {}; var object = {}; - if (options.defaults) + if (options.defaults) { object.category = options.enums === String ? "CATEGORY_UNSPECIFIED" : 0; + object.service = ""; + } if (message.category != null && message.hasOwnProperty("category")) object.category = options.enums === String ? $root.google.cloud.recommender.v1.Impact.Category[message.category] === undefined ? message.category : $root.google.cloud.recommender.v1.Impact.Category[message.category] : message.category; + if (message.service != null && message.hasOwnProperty("service")) + object.service = message.service; if (message.costProjection != null && message.hasOwnProperty("costProjection")) { object.costProjection = $root.google.cloud.recommender.v1.CostProjection.toObject(message.costProjection, options); if (options.oneofs) @@ -21645,6 +21708,34 @@ */ var api = {}; + /** + * FieldBehavior enum. + * @name google.api.FieldBehavior + * @enum {number} + * @property {number} FIELD_BEHAVIOR_UNSPECIFIED=0 FIELD_BEHAVIOR_UNSPECIFIED value + * @property {number} OPTIONAL=1 OPTIONAL value + * @property {number} REQUIRED=2 REQUIRED value + * @property {number} OUTPUT_ONLY=3 OUTPUT_ONLY value + * @property {number} INPUT_ONLY=4 INPUT_ONLY value + * @property {number} IMMUTABLE=5 IMMUTABLE value + * @property {number} UNORDERED_LIST=6 UNORDERED_LIST value + * @property {number} NON_EMPTY_DEFAULT=7 NON_EMPTY_DEFAULT value + * @property {number} IDENTIFIER=8 IDENTIFIER value + */ + api.FieldBehavior = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "FIELD_BEHAVIOR_UNSPECIFIED"] = 0; + values[valuesById[1] = "OPTIONAL"] = 1; + values[valuesById[2] = "REQUIRED"] = 2; + values[valuesById[3] = "OUTPUT_ONLY"] = 3; + values[valuesById[4] = "INPUT_ONLY"] = 4; + values[valuesById[5] = "IMMUTABLE"] = 5; + values[valuesById[6] = "UNORDERED_LIST"] = 6; + values[valuesById[7] = "NON_EMPTY_DEFAULT"] = 7; + values[valuesById[8] = "IDENTIFIER"] = 8; + return values; + })(); + api.ResourceDescriptor = (function() { /** @@ -22333,34 +22424,6 @@ return ResourceReference; })(); - /** - * FieldBehavior enum. - * @name google.api.FieldBehavior - * @enum {number} - * @property {number} FIELD_BEHAVIOR_UNSPECIFIED=0 FIELD_BEHAVIOR_UNSPECIFIED value - * @property {number} OPTIONAL=1 OPTIONAL value - * @property {number} REQUIRED=2 REQUIRED value - * @property {number} OUTPUT_ONLY=3 OUTPUT_ONLY value - * @property {number} INPUT_ONLY=4 INPUT_ONLY value - * @property {number} IMMUTABLE=5 IMMUTABLE value - * @property {number} UNORDERED_LIST=6 UNORDERED_LIST value - * @property {number} NON_EMPTY_DEFAULT=7 NON_EMPTY_DEFAULT value - * @property {number} IDENTIFIER=8 IDENTIFIER value - */ - api.FieldBehavior = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "FIELD_BEHAVIOR_UNSPECIFIED"] = 0; - values[valuesById[1] = "OPTIONAL"] = 1; - values[valuesById[2] = "REQUIRED"] = 2; - values[valuesById[3] = "OUTPUT_ONLY"] = 3; - values[valuesById[4] = "INPUT_ONLY"] = 4; - values[valuesById[5] = "IMMUTABLE"] = 5; - values[valuesById[6] = "UNORDERED_LIST"] = 6; - values[valuesById[7] = "NON_EMPTY_DEFAULT"] = 7; - values[valuesById[8] = "IDENTIFIER"] = 8; - return values; - })(); - api.Http = (function() { /** @@ -34267,8 +34330,8 @@ * @property {google.protobuf.IFeatureSet|null} [features] FieldOptions features * @property {google.protobuf.FieldOptions.IFeatureSupport|null} [featureSupport] FieldOptions featureSupport * @property {Array.|null} [uninterpretedOption] FieldOptions uninterpretedOption - * @property {google.api.IResourceReference|null} [".google.api.resourceReference"] FieldOptions .google.api.resourceReference * @property {Array.|null} [".google.api.fieldBehavior"] FieldOptions .google.api.fieldBehavior + * @property {google.api.IResourceReference|null} [".google.api.resourceReference"] FieldOptions .google.api.resourceReference */ /** @@ -34403,20 +34466,20 @@ FieldOptions.prototype.uninterpretedOption = $util.emptyArray; /** - * FieldOptions .google.api.resourceReference. - * @member {google.api.IResourceReference|null|undefined} .google.api.resourceReference + * FieldOptions .google.api.fieldBehavior. + * @member {Array.} .google.api.fieldBehavior * @memberof google.protobuf.FieldOptions * @instance */ - FieldOptions.prototype[".google.api.resourceReference"] = null; + FieldOptions.prototype[".google.api.fieldBehavior"] = $util.emptyArray; /** - * FieldOptions .google.api.fieldBehavior. - * @member {Array.} .google.api.fieldBehavior + * FieldOptions .google.api.resourceReference. + * @member {google.api.IResourceReference|null|undefined} .google.api.resourceReference * @memberof google.protobuf.FieldOptions * @instance */ - FieldOptions.prototype[".google.api.fieldBehavior"] = $util.emptyArray; + FieldOptions.prototype[".google.api.resourceReference"] = null; /** * Creates a new FieldOptions instance using the specified properties. @@ -34581,10 +34644,6 @@ message.uninterpretedOption.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32())); break; } - case 1055: { - message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32()); - break; - } case 1052: { if (!(message[".google.api.fieldBehavior"] && message[".google.api.fieldBehavior"].length)) message[".google.api.fieldBehavior"] = []; @@ -34596,6 +34655,10 @@ message[".google.api.fieldBehavior"].push(reader.int32()); break; } + case 1055: { + message[".google.api.resourceReference"] = $root.google.api.ResourceReference.decode(reader, reader.uint32()); + break; + } default: reader.skipType(tag & 7); break; @@ -34724,11 +34787,6 @@ return "uninterpretedOption." + error; } } - if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) { - var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]); - if (error) - return ".google.api.resourceReference." + error; - } if (message[".google.api.fieldBehavior"] != null && message.hasOwnProperty(".google.api.fieldBehavior")) { if (!Array.isArray(message[".google.api.fieldBehavior"])) return ".google.api.fieldBehavior: array expected"; @@ -34748,6 +34806,11 @@ break; } } + if (message[".google.api.resourceReference"] != null && message.hasOwnProperty(".google.api.resourceReference")) { + var error = $root.google.api.ResourceReference.verify(message[".google.api.resourceReference"]); + if (error) + return ".google.api.resourceReference." + error; + } return null; }; @@ -34918,11 +34981,6 @@ message.uninterpretedOption[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpretedOption[i]); } } - if (object[".google.api.resourceReference"] != null) { - if (typeof object[".google.api.resourceReference"] !== "object") - throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected"); - message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]); - } if (object[".google.api.fieldBehavior"]) { if (!Array.isArray(object[".google.api.fieldBehavior"])) throw TypeError(".google.protobuf.FieldOptions..google.api.fieldBehavior: array expected"); @@ -34972,6 +35030,11 @@ break; } } + if (object[".google.api.resourceReference"] != null) { + if (typeof object[".google.api.resourceReference"] !== "object") + throw TypeError(".google.protobuf.FieldOptions..google.api.resourceReference: object expected"); + message[".google.api.resourceReference"] = $root.google.api.ResourceReference.fromObject(object[".google.api.resourceReference"]); + } return message; }; diff --git a/packages/google-cloud-recommender/protos/protos.json b/packages/google-cloud-recommender/protos/protos.json index c71c924eef64..5d69986a7a8f 100644 --- a/packages/google-cloud-recommender/protos/protos.json +++ b/packages/google-cloud-recommender/protos/protos.json @@ -26,7 +26,10 @@ "fields": { "name": { "type": "string", - "id": 1 + "id": 1, + "options": { + "(google.api.field_behavior)": "IDENTIFIER" + } }, "description": { "type": "string", @@ -137,7 +140,10 @@ "fields": { "name": { "type": "string", - "id": 1 + "id": 1, + "options": { + "(google.api.field_behavior)": "IDENTIFIER" + } }, "insightTypeGenerationConfig": { "type": "InsightTypeGenerationConfig", @@ -185,7 +191,10 @@ "fields": { "name": { "type": "string", - "id": 1 + "id": 1, + "options": { + "(google.api.field_behavior)": "IDENTIFIER" + } }, "description": { "type": "string", @@ -232,6 +241,11 @@ "xorGroupId": { "type": "string", "id": 18 + }, + "targetResources": { + "rule": "repeated", + "type": "string", + "id": 19 } }, "nested": { @@ -435,6 +449,10 @@ "reliabilityProjection": { "type": "ReliabilityProjection", "id": 103 + }, + "service": { + "type": "string", + "id": 3 } }, "nested": { @@ -484,7 +502,10 @@ "fields": { "name": { "type": "string", - "id": 1 + "id": 1, + "options": { + "(google.api.field_behavior)": "IDENTIFIER" + } }, "recommenderGenerationConfig": { "type": "RecommenderGenerationConfig", @@ -2493,6 +2514,28 @@ "objc_class_prefix": "GAPI" }, "nested": { + "fieldBehavior": { + "rule": "repeated", + "type": "google.api.FieldBehavior", + "id": 1052, + "extend": "google.protobuf.FieldOptions", + "options": { + "packed": false + } + }, + "FieldBehavior": { + "values": { + "FIELD_BEHAVIOR_UNSPECIFIED": 0, + "OPTIONAL": 1, + "REQUIRED": 2, + "OUTPUT_ONLY": 3, + "INPUT_ONLY": 4, + "IMMUTABLE": 5, + "UNORDERED_LIST": 6, + "NON_EMPTY_DEFAULT": 7, + "IDENTIFIER": 8 + } + }, "resourceReference": { "type": "google.api.ResourceReference", "id": 1055, @@ -2570,28 +2613,6 @@ } } }, - "fieldBehavior": { - "rule": "repeated", - "type": "google.api.FieldBehavior", - "id": 1052, - "extend": "google.protobuf.FieldOptions", - "options": { - "packed": false - } - }, - "FieldBehavior": { - "values": { - "FIELD_BEHAVIOR_UNSPECIFIED": 0, - "OPTIONAL": 1, - "REQUIRED": 2, - "OUTPUT_ONLY": 3, - "INPUT_ONLY": 4, - "IMMUTABLE": 5, - "UNORDERED_LIST": 6, - "NON_EMPTY_DEFAULT": 7, - "IDENTIFIER": 8 - } - }, "http": { "type": "HttpRule", "id": 72295728,