From 19e92001a0d317dcccf2e64f2d2c2aabb05a05b6 Mon Sep 17 00:00:00 2001 From: Alexander Fenster Date: Mon, 6 Jul 2020 10:18:15 -0700 Subject: [PATCH] build: use bazel build (#90) --- .../google/cloud/recommender/v1/insight.proto | 135 + .../cloud/recommender/v1/recommendation.proto | 15 +- .../recommender/v1/recommender_service.proto | 131 +- .../protos/protos.d.ts | 917 +++ .../google-cloud-recommender/protos/protos.js | 5058 ++++++++++++----- .../protos/protos.json | 225 +- .../src/v1/recommender_client.ts | 585 +- .../src/v1/recommender_client_config.json | 12 + .../src/v1/recommender_proto_list.json | 1 + .../google-cloud-recommender/synth.metadata | 18 +- packages/google-cloud-recommender/synth.py | 14 +- .../test/gapic_recommender_v1.ts | 792 ++- .../webpack.config.js | 4 +- 13 files changed, 6371 insertions(+), 1536 deletions(-) create mode 100644 packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight.proto 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 new file mode 100644 index 00000000000..783a714776e --- /dev/null +++ b/packages/google-cloud-recommender/protos/google/cloud/recommender/v1/insight.proto @@ -0,0 +1,135 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.recommender.v1; + +import "google/api/resource.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.Recommender.V1"; +option go_package = "google.golang.org/genproto/googleapis/cloud/recommender/v1;recommender"; +option java_multiple_files = true; +option java_outer_classname = "InsightProto"; +option java_package = "com.google.cloud.recommender.v1"; +option objc_class_prefix = "CREC"; +option (google.api.resource_definition) = { + type: "recommender.googleapis.com/InsightType" + pattern: "projects/{project}/locations/{location}/insightTypes/{insight_type}" +}; + +// An insight along with the information used to derive the insight. The insight +// may have associated recomendations as well. +message Insight { + option (google.api.resource) = { + type: "recommender.googleapis.com/Insight" + pattern: "projects/{project}/locations/{location}/insightTypes/{insight_type}/insights/{insight}" + }; + + // Reference to an associated recommendation. + message RecommendationReference { + // Recommendation resource name, e.g. + // projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]/recommendations/[RECOMMENDATION_ID] + string recommendation = 1; + } + + // Insight category. + enum Category { + // Unspecified category. + CATEGORY_UNSPECIFIED = 0; + + // The insight is related to cost. + COST = 1; + + // The insight is related to security. + SECURITY = 2; + + // The insight is related to performance. + PERFORMANCE = 3; + + // This insight is related to manageability. + MANAGEABILITY = 4; + } + + // Name of the insight. + string name = 1; + + // Free-form human readable summary in English. The maximum length is 500 + // characters. + string description = 2; + + // Fully qualified resource names that this insight is targeting. + repeated string target_resources = 9; + + // Insight subtype. Insight content schema will be stable for a given subtype. + string insight_subtype = 10; + + // A struct of custom fields to explain the insight. + // Example: "grantedPermissionsCount": "1000" + google.protobuf.Struct content = 3; + + // Timestamp of the latest data used to generate the insight. + google.protobuf.Timestamp last_refresh_time = 4; + + // Observation period that led to the insight. The source data used to + // generate the insight ends at last_refresh_time and begins at + // (last_refresh_time - observation_period). + google.protobuf.Duration observation_period = 5; + + // Information state and metadata. + InsightStateInfo state_info = 6; + + // Category being targeted by the insight. + Category category = 7; + + // Fingerprint of the Insight. Provides optimistic locking when updating + // states. + string etag = 11; + + // Recommendations derived from this insight. + repeated RecommendationReference associated_recommendations = 8; +} + +// Information related to insight state. +message InsightStateInfo { + // Represents insight state. + enum State { + // Unspecified state. + STATE_UNSPECIFIED = 0; + + // Insight is active. Content for ACTIVE insights can be updated by Google. + // ACTIVE insights can be marked DISMISSED OR ACCEPTED. + ACTIVE = 1; + + // Some action has been taken based on this insight. Insights become + // accepted when a recommendation derived from the insight has been marked + // CLAIMED, SUCCEEDED, or FAILED. ACTIVE insights can also be marked + // ACCEPTED explicitly. Content for ACCEPTED insights is immutable. ACCEPTED + // insights can only be marked ACCEPTED (which may update state metadata). + ACCEPTED = 2; + + // Insight is dismissed. Content for DISMISSED insights can be updated by + // Google. DISMISSED insights can be marked as ACTIVE. + DISMISSED = 3; + } + + // Insight state. + State state = 1; + + // A map of metadata for the state, provided by user or automations systems. + map state_metadata = 2; +} 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 15e2bca185b..aa8321eeb42 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 2019 Google LLC. +// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,7 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// syntax = "proto3"; @@ -41,6 +40,13 @@ message Recommendation { pattern: "projects/{project}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}" }; + // Reference to an associated insight. + message InsightReference { + // Insight resource name, e.g. + // projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[INSIGHT_ID] + string insight = 1; + } + // Name of recommendation. string name = 1; @@ -81,6 +87,9 @@ message Recommendation { // Fingerprint of the Recommendation. Provides optimistic locking when // updating states. string etag = 11; + + // Insights that led to this recommendation. + repeated InsightReference associated_insights = 14; } // Contains what resources are changing and how they are changing. @@ -233,7 +242,7 @@ message Impact { // Information for state. Contains state and metadata. message RecommendationStateInfo { - // Represents Recommendation State + // Represents Recommendation State. enum State { // Default state. Don't use directly. STATE_UNSPECIFIED = 0; 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 97a04f5accc..4f24a050959 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 2019 Google LLC. +// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,7 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// syntax = "proto3"; @@ -21,6 +20,7 @@ import "google/api/annotations.proto"; import "google/api/client.proto"; import "google/api/field_behavior.proto"; import "google/api/resource.proto"; +import "google/cloud/recommender/v1/insight.proto"; import "google/cloud/recommender/v1/recommendation.proto"; option csharp_namespace = "Google.Cloud.Recommender.V1"; @@ -30,14 +30,46 @@ option java_outer_classname = "RecommenderProto"; option java_package = "com.google.cloud.recommender.v1"; option objc_class_prefix = "CREC"; -// Provides recommendations for cloud customers for various categories like -// performance optimization, cost savings, reliability, feature discovery, etc. -// These recommendations are generated automatically based on analysis of user -// resources, configuration and monitoring metrics. +// Provides insights and recommendations for cloud customers for various +// categories like performance optimization, cost savings, reliability, feature +// discovery, etc. Insights and recommendations are generated automatically +// based on analysis of user resources, configuration and monitoring metrics. service Recommender { option (google.api.default_host) = "recommender.googleapis.com"; option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; + // Lists insights for a Cloud project. Requires the recommender.*.list IAM + // permission for the specified insight type. + rpc ListInsights(ListInsightsRequest) returns (ListInsightsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/insightTypes/*}/insights" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets the requested insight. Requires the recommender.*.get IAM permission + // for the specified insight type. + rpc GetInsight(GetInsightRequest) returns (Insight) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/insightTypes/*/insights/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Marks the Insight State as Accepted. Users can use this method to + // indicate to the Recommender API that they have applied some action based + // on the insight. This stops the insight content from being updated. + // + // MarkInsightAccepted can be applied to insights in ACTIVE state. Requires + // the recommender.*.update IAM permission for the specified insight. + rpc MarkInsightAccepted(MarkInsightAcceptedRequest) returns (Insight) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/insightTypes/*/insights/*}:markAccepted" + body: "*" + }; + option (google.api.method_signature) = "name,state_metadata,etag"; + } + // Lists recommendations for a Cloud project. Requires the recommender.*.list // IAM permission for the specified recommender. rpc ListRecommendations(ListRecommendationsRequest) returns (ListRecommendationsResponse) { @@ -57,10 +89,10 @@ service Recommender { option (google.api.method_signature) = "name"; } - // Mark the Recommendation State as Claimed. Users can use this method to + // Marks the Recommendation State as Claimed. Users can use this method to // indicate to the Recommender API that they are starting to apply the // recommendation themselves. This stops the recommendation content from being - // updated. + // updated. Associated insights are frozen and placed in the ACCEPTED state. // // MarkRecommendationClaimed can be applied to recommendations in CLAIMED, // SUCCEEDED, FAILED, or ACTIVE state. @@ -75,10 +107,11 @@ service Recommender { option (google.api.method_signature) = "name,state_metadata,etag"; } - // Mark the Recommendation State as Succeeded. Users can use this method to + // Marks the Recommendation State as Succeeded. Users can use this method to // indicate to the Recommender API that they have applied the recommendation // themselves, and the operation was successful. This stops the recommendation - // content from being updated. + // content from being updated. Associated insights are frozen and placed in + // the ACCEPTED state. // // MarkRecommendationSucceeded can be applied to recommendations in ACTIVE, // CLAIMED, SUCCEEDED, or FAILED state. @@ -93,10 +126,11 @@ service Recommender { option (google.api.method_signature) = "name,state_metadata,etag"; } - // Mark the Recommendation State as Failed. Users can use this method to + // Marks the Recommendation State as Failed. Users can use this method to // indicate to the Recommender API that they have applied the recommendation // themselves, and the operation failed. This stops the recommendation content - // from being updated. + // from being updated. Associated insights are frozen and placed in the + // ACCEPTED state. // // MarkRecommendationFailed can be applied to recommendations in ACTIVE, // CLAIMED, SUCCEEDED, or FAILED state. @@ -112,6 +146,79 @@ service Recommender { } } +// Request for the `ListInsights` method. +message ListInsightsRequest { + // Required. The container resource on which to execute the request. + // Acceptable formats: + // + // 1. + // "projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]", + // + // LOCATION here refers to GCP Locations: + // https://cloud.google.com/about/locations/ + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "recommender.googleapis.com/InsightType" + } + ]; + + // Optional. The maximum number of results to return from this request. Non-positive + // values are ignored. If not specified, the server will determine the number + // of results to return. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If present, retrieves the next batch of results from the preceding call to + // this method. `page_token` must be the value of `next_page_token` from the + // previous response. The values of other method parameters must be identical + // to those in the previous call. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Filter expression to restrict the insights returned. Supported + // filter fields: state + // Eg: `state:"DISMISSED" or state:"ACTIVE" + string filter = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response to the `ListInsights` method. +message ListInsightsResponse { + // The set of insights for the `parent` resource. + repeated Insight insights = 1; + + // A token that can be used to request the next page of results. This field is + // empty if there are no additional results. + string next_page_token = 2; +} + +// Request to the `GetInsight` method. +message GetInsightRequest { + // Required. Name of the insight. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "recommender.googleapis.com/Insight" + } + ]; +} + +// Request for the `MarkInsightAccepted` method. +message MarkInsightAcceptedRequest { + // Required. Name of the insight. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "recommender.googleapis.com/Insight" + } + ]; + + // Optional. State properties user wish to include with this state. Full replace of the + // current state_metadata. + map state_metadata = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Required. Fingerprint of the Insight. Provides optimistic locking. + string etag = 3 [(google.api.field_behavior) = REQUIRED]; +} + // Request for the `ListRecommendations` method. message ListRecommendationsRequest { // Required. The container resource on which to execute the request. diff --git a/packages/google-cloud-recommender/protos/protos.d.ts b/packages/google-cloud-recommender/protos/protos.d.ts index e46da2af2d6..3ddbc61b5de 100644 --- a/packages/google-cloud-recommender/protos/protos.d.ts +++ b/packages/google-cloud-recommender/protos/protos.d.ts @@ -26,6 +26,365 @@ export namespace google { /** Namespace v1. */ namespace v1 { + /** Properties of an Insight. */ + interface IInsight { + + /** Insight name */ + name?: (string|null); + + /** Insight description */ + description?: (string|null); + + /** Insight targetResources */ + targetResources?: (string[]|null); + + /** Insight insightSubtype */ + insightSubtype?: (string|null); + + /** Insight content */ + content?: (google.protobuf.IStruct|null); + + /** Insight lastRefreshTime */ + lastRefreshTime?: (google.protobuf.ITimestamp|null); + + /** Insight observationPeriod */ + observationPeriod?: (google.protobuf.IDuration|null); + + /** Insight stateInfo */ + stateInfo?: (google.cloud.recommender.v1.IInsightStateInfo|null); + + /** Insight category */ + category?: (google.cloud.recommender.v1.Insight.Category|keyof typeof google.cloud.recommender.v1.Insight.Category|null); + + /** Insight etag */ + etag?: (string|null); + + /** Insight associatedRecommendations */ + associatedRecommendations?: (google.cloud.recommender.v1.Insight.IRecommendationReference[]|null); + } + + /** Represents an Insight. */ + class Insight implements IInsight { + + /** + * Constructs a new Insight. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.recommender.v1.IInsight); + + /** Insight name. */ + public name: string; + + /** Insight description. */ + public description: string; + + /** Insight targetResources. */ + public targetResources: string[]; + + /** Insight insightSubtype. */ + public insightSubtype: string; + + /** Insight content. */ + public content?: (google.protobuf.IStruct|null); + + /** Insight lastRefreshTime. */ + public lastRefreshTime?: (google.protobuf.ITimestamp|null); + + /** Insight observationPeriod. */ + public observationPeriod?: (google.protobuf.IDuration|null); + + /** Insight stateInfo. */ + public stateInfo?: (google.cloud.recommender.v1.IInsightStateInfo|null); + + /** Insight category. */ + public category: (google.cloud.recommender.v1.Insight.Category|keyof typeof google.cloud.recommender.v1.Insight.Category); + + /** Insight etag. */ + public etag: string; + + /** Insight associatedRecommendations. */ + public associatedRecommendations: google.cloud.recommender.v1.Insight.IRecommendationReference[]; + + /** + * Creates a new Insight instance using the specified properties. + * @param [properties] Properties to set + * @returns Insight instance + */ + public static create(properties?: google.cloud.recommender.v1.IInsight): google.cloud.recommender.v1.Insight; + + /** + * Encodes the specified Insight message. Does not implicitly {@link google.cloud.recommender.v1.Insight.verify|verify} messages. + * @param message Insight message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.recommender.v1.IInsight, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified Insight message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Insight.verify|verify} messages. + * @param message Insight message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.recommender.v1.IInsight, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an Insight message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Insight + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.recommender.v1.Insight; + + /** + * Decodes an Insight message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns Insight + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.recommender.v1.Insight; + + /** + * Verifies an Insight message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an Insight message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns Insight + */ + public static fromObject(object: { [k: string]: any }): google.cloud.recommender.v1.Insight; + + /** + * Creates a plain object from an Insight message. Also converts values to other types if specified. + * @param message Insight + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.recommender.v1.Insight, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this Insight to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace Insight { + + /** Properties of a RecommendationReference. */ + interface IRecommendationReference { + + /** RecommendationReference recommendation */ + recommendation?: (string|null); + } + + /** Represents a RecommendationReference. */ + class RecommendationReference implements IRecommendationReference { + + /** + * Constructs a new RecommendationReference. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.recommender.v1.Insight.IRecommendationReference); + + /** RecommendationReference recommendation. */ + public recommendation: string; + + /** + * Creates a new RecommendationReference instance using the specified properties. + * @param [properties] Properties to set + * @returns RecommendationReference instance + */ + public static create(properties?: google.cloud.recommender.v1.Insight.IRecommendationReference): google.cloud.recommender.v1.Insight.RecommendationReference; + + /** + * Encodes the specified RecommendationReference message. Does not implicitly {@link google.cloud.recommender.v1.Insight.RecommendationReference.verify|verify} messages. + * @param message RecommendationReference message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.recommender.v1.Insight.IRecommendationReference, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified RecommendationReference message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Insight.RecommendationReference.verify|verify} messages. + * @param message RecommendationReference message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.recommender.v1.Insight.IRecommendationReference, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a RecommendationReference message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns RecommendationReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.recommender.v1.Insight.RecommendationReference; + + /** + * Decodes a RecommendationReference message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns RecommendationReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.recommender.v1.Insight.RecommendationReference; + + /** + * Verifies a RecommendationReference message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a RecommendationReference message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns RecommendationReference + */ + public static fromObject(object: { [k: string]: any }): google.cloud.recommender.v1.Insight.RecommendationReference; + + /** + * Creates a plain object from a RecommendationReference message. Also converts values to other types if specified. + * @param message RecommendationReference + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.recommender.v1.Insight.RecommendationReference, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this RecommendationReference to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Category enum. */ + enum Category { + CATEGORY_UNSPECIFIED = 0, + COST = 1, + SECURITY = 2, + PERFORMANCE = 3, + MANAGEABILITY = 4 + } + } + + /** Properties of an InsightStateInfo. */ + interface IInsightStateInfo { + + /** InsightStateInfo state */ + state?: (google.cloud.recommender.v1.InsightStateInfo.State|keyof typeof google.cloud.recommender.v1.InsightStateInfo.State|null); + + /** InsightStateInfo stateMetadata */ + stateMetadata?: ({ [k: string]: string }|null); + } + + /** Represents an InsightStateInfo. */ + class InsightStateInfo implements IInsightStateInfo { + + /** + * Constructs a new InsightStateInfo. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.recommender.v1.IInsightStateInfo); + + /** InsightStateInfo state. */ + public state: (google.cloud.recommender.v1.InsightStateInfo.State|keyof typeof google.cloud.recommender.v1.InsightStateInfo.State); + + /** InsightStateInfo stateMetadata. */ + public stateMetadata: { [k: string]: string }; + + /** + * Creates a new InsightStateInfo instance using the specified properties. + * @param [properties] Properties to set + * @returns InsightStateInfo instance + */ + public static create(properties?: google.cloud.recommender.v1.IInsightStateInfo): google.cloud.recommender.v1.InsightStateInfo; + + /** + * Encodes the specified InsightStateInfo message. Does not implicitly {@link google.cloud.recommender.v1.InsightStateInfo.verify|verify} messages. + * @param message InsightStateInfo message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.recommender.v1.IInsightStateInfo, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified InsightStateInfo message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.InsightStateInfo.verify|verify} messages. + * @param message InsightStateInfo message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.recommender.v1.IInsightStateInfo, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an InsightStateInfo message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns InsightStateInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.recommender.v1.InsightStateInfo; + + /** + * Decodes an InsightStateInfo message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns InsightStateInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.recommender.v1.InsightStateInfo; + + /** + * Verifies an InsightStateInfo message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an InsightStateInfo message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns InsightStateInfo + */ + public static fromObject(object: { [k: string]: any }): google.cloud.recommender.v1.InsightStateInfo; + + /** + * Creates a plain object from an InsightStateInfo message. Also converts values to other types if specified. + * @param message InsightStateInfo + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.recommender.v1.InsightStateInfo, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this InsightStateInfo to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + namespace InsightStateInfo { + + /** State enum. */ + enum State { + STATE_UNSPECIFIED = 0, + ACTIVE = 1, + ACCEPTED = 2, + DISMISSED = 3 + } + } + /** Properties of a Recommendation. */ interface IRecommendation { @@ -55,6 +414,9 @@ export namespace google { /** Recommendation etag */ etag?: (string|null); + + /** Recommendation associatedInsights */ + associatedInsights?: (google.cloud.recommender.v1.Recommendation.IInsightReference[]|null); } /** Represents a Recommendation. */ @@ -93,6 +455,9 @@ export namespace google { /** Recommendation etag. */ public etag: string; + /** Recommendation associatedInsights. */ + public associatedInsights: google.cloud.recommender.v1.Recommendation.IInsightReference[]; + /** * Creates a new Recommendation instance using the specified properties. * @param [properties] Properties to set @@ -164,6 +529,99 @@ export namespace google { public toJSON(): { [k: string]: any }; } + namespace Recommendation { + + /** Properties of an InsightReference. */ + interface IInsightReference { + + /** InsightReference insight */ + insight?: (string|null); + } + + /** Represents an InsightReference. */ + class InsightReference implements IInsightReference { + + /** + * Constructs a new InsightReference. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.recommender.v1.Recommendation.IInsightReference); + + /** InsightReference insight. */ + public insight: string; + + /** + * Creates a new InsightReference instance using the specified properties. + * @param [properties] Properties to set + * @returns InsightReference instance + */ + public static create(properties?: google.cloud.recommender.v1.Recommendation.IInsightReference): google.cloud.recommender.v1.Recommendation.InsightReference; + + /** + * Encodes the specified InsightReference message. Does not implicitly {@link google.cloud.recommender.v1.Recommendation.InsightReference.verify|verify} messages. + * @param message InsightReference message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.recommender.v1.Recommendation.IInsightReference, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified InsightReference message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Recommendation.InsightReference.verify|verify} messages. + * @param message InsightReference message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.recommender.v1.Recommendation.IInsightReference, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an InsightReference message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns InsightReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.recommender.v1.Recommendation.InsightReference; + + /** + * Decodes an InsightReference message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns InsightReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.recommender.v1.Recommendation.InsightReference; + + /** + * Verifies an InsightReference message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an InsightReference message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns InsightReference + */ + public static fromObject(object: { [k: string]: any }): google.cloud.recommender.v1.Recommendation.InsightReference; + + /** + * Creates a plain object from an InsightReference message. Also converts values to other types if specified. + * @param message InsightReference + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.recommender.v1.Recommendation.InsightReference, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this InsightReference to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + /** Properties of a RecommendationContent. */ interface IRecommendationContent { @@ -920,6 +1378,48 @@ export namespace google { */ public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): Recommender; + /** + * Calls ListInsights. + * @param request ListInsightsRequest message or plain object + * @param callback Node-style callback called with the error, if any, and ListInsightsResponse + */ + public listInsights(request: google.cloud.recommender.v1.IListInsightsRequest, callback: google.cloud.recommender.v1.Recommender.ListInsightsCallback): void; + + /** + * Calls ListInsights. + * @param request ListInsightsRequest message or plain object + * @returns Promise + */ + public listInsights(request: google.cloud.recommender.v1.IListInsightsRequest): Promise; + + /** + * Calls GetInsight. + * @param request GetInsightRequest message or plain object + * @param callback Node-style callback called with the error, if any, and Insight + */ + public getInsight(request: google.cloud.recommender.v1.IGetInsightRequest, callback: google.cloud.recommender.v1.Recommender.GetInsightCallback): void; + + /** + * Calls GetInsight. + * @param request GetInsightRequest message or plain object + * @returns Promise + */ + public getInsight(request: google.cloud.recommender.v1.IGetInsightRequest): Promise; + + /** + * Calls MarkInsightAccepted. + * @param request MarkInsightAcceptedRequest message or plain object + * @param callback Node-style callback called with the error, if any, and Insight + */ + public markInsightAccepted(request: google.cloud.recommender.v1.IMarkInsightAcceptedRequest, callback: google.cloud.recommender.v1.Recommender.MarkInsightAcceptedCallback): void; + + /** + * Calls MarkInsightAccepted. + * @param request MarkInsightAcceptedRequest message or plain object + * @returns Promise + */ + public markInsightAccepted(request: google.cloud.recommender.v1.IMarkInsightAcceptedRequest): Promise; + /** * Calls ListRecommendations. * @param request ListRecommendationsRequest message or plain object @@ -993,6 +1493,27 @@ export namespace google { namespace Recommender { + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#listInsights}. + * @param error Error, if any + * @param [response] ListInsightsResponse + */ + type ListInsightsCallback = (error: (Error|null), response?: google.cloud.recommender.v1.ListInsightsResponse) => void; + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#getInsight}. + * @param error Error, if any + * @param [response] Insight + */ + type GetInsightCallback = (error: (Error|null), response?: google.cloud.recommender.v1.Insight) => void; + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#markInsightAccepted}. + * @param error Error, if any + * @param [response] Insight + */ + type MarkInsightAcceptedCallback = (error: (Error|null), response?: google.cloud.recommender.v1.Insight) => void; + /** * Callback as used by {@link google.cloud.recommender.v1.Recommender#listRecommendations}. * @param error Error, if any @@ -1029,6 +1550,402 @@ export namespace google { type MarkRecommendationFailedCallback = (error: (Error|null), response?: google.cloud.recommender.v1.Recommendation) => void; } + /** Properties of a ListInsightsRequest. */ + interface IListInsightsRequest { + + /** ListInsightsRequest parent */ + parent?: (string|null); + + /** ListInsightsRequest pageSize */ + pageSize?: (number|null); + + /** ListInsightsRequest pageToken */ + pageToken?: (string|null); + + /** ListInsightsRequest filter */ + filter?: (string|null); + } + + /** Represents a ListInsightsRequest. */ + class ListInsightsRequest implements IListInsightsRequest { + + /** + * Constructs a new ListInsightsRequest. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.recommender.v1.IListInsightsRequest); + + /** ListInsightsRequest parent. */ + public parent: string; + + /** ListInsightsRequest pageSize. */ + public pageSize: number; + + /** ListInsightsRequest pageToken. */ + public pageToken: string; + + /** ListInsightsRequest filter. */ + public filter: string; + + /** + * Creates a new ListInsightsRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns ListInsightsRequest instance + */ + public static create(properties?: google.cloud.recommender.v1.IListInsightsRequest): google.cloud.recommender.v1.ListInsightsRequest; + + /** + * Encodes the specified ListInsightsRequest message. Does not implicitly {@link google.cloud.recommender.v1.ListInsightsRequest.verify|verify} messages. + * @param message ListInsightsRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.recommender.v1.IListInsightsRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ListInsightsRequest message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.ListInsightsRequest.verify|verify} messages. + * @param message ListInsightsRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.recommender.v1.IListInsightsRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ListInsightsRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ListInsightsRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.recommender.v1.ListInsightsRequest; + + /** + * Decodes a ListInsightsRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ListInsightsRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.recommender.v1.ListInsightsRequest; + + /** + * Verifies a ListInsightsRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ListInsightsRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ListInsightsRequest + */ + public static fromObject(object: { [k: string]: any }): google.cloud.recommender.v1.ListInsightsRequest; + + /** + * Creates a plain object from a ListInsightsRequest message. Also converts values to other types if specified. + * @param message ListInsightsRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.recommender.v1.ListInsightsRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ListInsightsRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a ListInsightsResponse. */ + interface IListInsightsResponse { + + /** ListInsightsResponse insights */ + insights?: (google.cloud.recommender.v1.IInsight[]|null); + + /** ListInsightsResponse nextPageToken */ + nextPageToken?: (string|null); + } + + /** Represents a ListInsightsResponse. */ + class ListInsightsResponse implements IListInsightsResponse { + + /** + * Constructs a new ListInsightsResponse. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.recommender.v1.IListInsightsResponse); + + /** ListInsightsResponse insights. */ + public insights: google.cloud.recommender.v1.IInsight[]; + + /** ListInsightsResponse nextPageToken. */ + public nextPageToken: string; + + /** + * Creates a new ListInsightsResponse instance using the specified properties. + * @param [properties] Properties to set + * @returns ListInsightsResponse instance + */ + public static create(properties?: google.cloud.recommender.v1.IListInsightsResponse): google.cloud.recommender.v1.ListInsightsResponse; + + /** + * Encodes the specified ListInsightsResponse message. Does not implicitly {@link google.cloud.recommender.v1.ListInsightsResponse.verify|verify} messages. + * @param message ListInsightsResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.recommender.v1.IListInsightsResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified ListInsightsResponse message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.ListInsightsResponse.verify|verify} messages. + * @param message ListInsightsResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.recommender.v1.IListInsightsResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a ListInsightsResponse message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns ListInsightsResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.recommender.v1.ListInsightsResponse; + + /** + * Decodes a ListInsightsResponse message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns ListInsightsResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.recommender.v1.ListInsightsResponse; + + /** + * Verifies a ListInsightsResponse message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a ListInsightsResponse message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns ListInsightsResponse + */ + public static fromObject(object: { [k: string]: any }): google.cloud.recommender.v1.ListInsightsResponse; + + /** + * Creates a plain object from a ListInsightsResponse message. Also converts values to other types if specified. + * @param message ListInsightsResponse + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.recommender.v1.ListInsightsResponse, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this ListInsightsResponse to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a GetInsightRequest. */ + interface IGetInsightRequest { + + /** GetInsightRequest name */ + name?: (string|null); + } + + /** Represents a GetInsightRequest. */ + class GetInsightRequest implements IGetInsightRequest { + + /** + * Constructs a new GetInsightRequest. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.recommender.v1.IGetInsightRequest); + + /** GetInsightRequest name. */ + public name: string; + + /** + * Creates a new GetInsightRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns GetInsightRequest instance + */ + public static create(properties?: google.cloud.recommender.v1.IGetInsightRequest): google.cloud.recommender.v1.GetInsightRequest; + + /** + * Encodes the specified GetInsightRequest message. Does not implicitly {@link google.cloud.recommender.v1.GetInsightRequest.verify|verify} messages. + * @param message GetInsightRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.recommender.v1.IGetInsightRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified GetInsightRequest message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.GetInsightRequest.verify|verify} messages. + * @param message GetInsightRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.recommender.v1.IGetInsightRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a GetInsightRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns GetInsightRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.recommender.v1.GetInsightRequest; + + /** + * Decodes a GetInsightRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns GetInsightRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.recommender.v1.GetInsightRequest; + + /** + * Verifies a GetInsightRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a GetInsightRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns GetInsightRequest + */ + public static fromObject(object: { [k: string]: any }): google.cloud.recommender.v1.GetInsightRequest; + + /** + * Creates a plain object from a GetInsightRequest message. Also converts values to other types if specified. + * @param message GetInsightRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.recommender.v1.GetInsightRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this GetInsightRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a MarkInsightAcceptedRequest. */ + interface IMarkInsightAcceptedRequest { + + /** MarkInsightAcceptedRequest name */ + name?: (string|null); + + /** MarkInsightAcceptedRequest stateMetadata */ + stateMetadata?: ({ [k: string]: string }|null); + + /** MarkInsightAcceptedRequest etag */ + etag?: (string|null); + } + + /** Represents a MarkInsightAcceptedRequest. */ + class MarkInsightAcceptedRequest implements IMarkInsightAcceptedRequest { + + /** + * Constructs a new MarkInsightAcceptedRequest. + * @param [properties] Properties to set + */ + constructor(properties?: google.cloud.recommender.v1.IMarkInsightAcceptedRequest); + + /** MarkInsightAcceptedRequest name. */ + public name: string; + + /** MarkInsightAcceptedRequest stateMetadata. */ + public stateMetadata: { [k: string]: string }; + + /** MarkInsightAcceptedRequest etag. */ + public etag: string; + + /** + * Creates a new MarkInsightAcceptedRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns MarkInsightAcceptedRequest instance + */ + public static create(properties?: google.cloud.recommender.v1.IMarkInsightAcceptedRequest): google.cloud.recommender.v1.MarkInsightAcceptedRequest; + + /** + * Encodes the specified MarkInsightAcceptedRequest message. Does not implicitly {@link google.cloud.recommender.v1.MarkInsightAcceptedRequest.verify|verify} messages. + * @param message MarkInsightAcceptedRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.cloud.recommender.v1.IMarkInsightAcceptedRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified MarkInsightAcceptedRequest message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.MarkInsightAcceptedRequest.verify|verify} messages. + * @param message MarkInsightAcceptedRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.cloud.recommender.v1.IMarkInsightAcceptedRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a MarkInsightAcceptedRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns MarkInsightAcceptedRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.cloud.recommender.v1.MarkInsightAcceptedRequest; + + /** + * Decodes a MarkInsightAcceptedRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns MarkInsightAcceptedRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.cloud.recommender.v1.MarkInsightAcceptedRequest; + + /** + * Verifies a MarkInsightAcceptedRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a MarkInsightAcceptedRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns MarkInsightAcceptedRequest + */ + public static fromObject(object: { [k: string]: any }): google.cloud.recommender.v1.MarkInsightAcceptedRequest; + + /** + * Creates a plain object from a MarkInsightAcceptedRequest message. Also converts values to other types if specified. + * @param message MarkInsightAcceptedRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.cloud.recommender.v1.MarkInsightAcceptedRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this MarkInsightAcceptedRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + /** Properties of a ListRecommendationsRequest. */ interface IListRecommendationsRequest { diff --git a/packages/google-cloud-recommender/protos/protos.js b/packages/google-cloud-recommender/protos/protos.js index 6839e8c5183..ae8deffaaac 100644 --- a/packages/google-cloud-recommender/protos/protos.js +++ b/packages/google-cloud-recommender/protos/protos.js @@ -66,33 +66,36 @@ */ var v1 = {}; - v1.Recommendation = (function() { + v1.Insight = (function() { /** - * Properties of a Recommendation. + * Properties of an Insight. * @memberof google.cloud.recommender.v1 - * @interface IRecommendation - * @property {string|null} [name] Recommendation name - * @property {string|null} [description] Recommendation description - * @property {string|null} [recommenderSubtype] Recommendation recommenderSubtype - * @property {google.protobuf.ITimestamp|null} [lastRefreshTime] Recommendation lastRefreshTime - * @property {google.cloud.recommender.v1.IImpact|null} [primaryImpact] Recommendation primaryImpact - * @property {Array.|null} [additionalImpact] Recommendation additionalImpact - * @property {google.cloud.recommender.v1.IRecommendationContent|null} [content] Recommendation content - * @property {google.cloud.recommender.v1.IRecommendationStateInfo|null} [stateInfo] Recommendation stateInfo - * @property {string|null} [etag] Recommendation etag + * @interface IInsight + * @property {string|null} [name] Insight name + * @property {string|null} [description] Insight description + * @property {Array.|null} [targetResources] Insight targetResources + * @property {string|null} [insightSubtype] Insight insightSubtype + * @property {google.protobuf.IStruct|null} [content] Insight content + * @property {google.protobuf.ITimestamp|null} [lastRefreshTime] Insight lastRefreshTime + * @property {google.protobuf.IDuration|null} [observationPeriod] Insight observationPeriod + * @property {google.cloud.recommender.v1.IInsightStateInfo|null} [stateInfo] Insight stateInfo + * @property {google.cloud.recommender.v1.Insight.Category|null} [category] Insight category + * @property {string|null} [etag] Insight etag + * @property {Array.|null} [associatedRecommendations] Insight associatedRecommendations */ /** - * Constructs a new Recommendation. + * Constructs a new Insight. * @memberof google.cloud.recommender.v1 - * @classdesc Represents a Recommendation. - * @implements IRecommendation + * @classdesc Represents an Insight. + * @implements IInsight * @constructor - * @param {google.cloud.recommender.v1.IRecommendation=} [properties] Properties to set + * @param {google.cloud.recommender.v1.IInsight=} [properties] Properties to set */ - function Recommendation(properties) { - this.additionalImpact = []; + function Insight(properties) { + this.targetResources = []; + this.associatedRecommendations = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -100,151 +103,172 @@ } /** - * Recommendation name. + * Insight name. * @member {string} name - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.name = ""; + Insight.prototype.name = ""; /** - * Recommendation description. + * Insight description. * @member {string} description - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.description = ""; + Insight.prototype.description = ""; /** - * Recommendation recommenderSubtype. - * @member {string} recommenderSubtype - * @memberof google.cloud.recommender.v1.Recommendation + * Insight targetResources. + * @member {Array.} targetResources + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.recommenderSubtype = ""; + Insight.prototype.targetResources = $util.emptyArray; /** - * Recommendation lastRefreshTime. - * @member {google.protobuf.ITimestamp|null|undefined} lastRefreshTime - * @memberof google.cloud.recommender.v1.Recommendation + * Insight insightSubtype. + * @member {string} insightSubtype + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.lastRefreshTime = null; + Insight.prototype.insightSubtype = ""; /** - * Recommendation primaryImpact. - * @member {google.cloud.recommender.v1.IImpact|null|undefined} primaryImpact - * @memberof google.cloud.recommender.v1.Recommendation + * Insight content. + * @member {google.protobuf.IStruct|null|undefined} content + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.primaryImpact = null; + Insight.prototype.content = null; /** - * Recommendation additionalImpact. - * @member {Array.} additionalImpact - * @memberof google.cloud.recommender.v1.Recommendation + * Insight lastRefreshTime. + * @member {google.protobuf.ITimestamp|null|undefined} lastRefreshTime + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.additionalImpact = $util.emptyArray; + Insight.prototype.lastRefreshTime = null; /** - * Recommendation content. - * @member {google.cloud.recommender.v1.IRecommendationContent|null|undefined} content - * @memberof google.cloud.recommender.v1.Recommendation + * Insight observationPeriod. + * @member {google.protobuf.IDuration|null|undefined} observationPeriod + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.content = null; + Insight.prototype.observationPeriod = null; /** - * Recommendation stateInfo. - * @member {google.cloud.recommender.v1.IRecommendationStateInfo|null|undefined} stateInfo - * @memberof google.cloud.recommender.v1.Recommendation + * Insight stateInfo. + * @member {google.cloud.recommender.v1.IInsightStateInfo|null|undefined} stateInfo + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.stateInfo = null; + Insight.prototype.stateInfo = null; /** - * Recommendation etag. + * Insight category. + * @member {google.cloud.recommender.v1.Insight.Category} category + * @memberof google.cloud.recommender.v1.Insight + * @instance + */ + Insight.prototype.category = 0; + + /** + * Insight etag. * @member {string} etag - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @instance */ - Recommendation.prototype.etag = ""; + Insight.prototype.etag = ""; /** - * Creates a new Recommendation instance using the specified properties. + * Insight associatedRecommendations. + * @member {Array.} associatedRecommendations + * @memberof google.cloud.recommender.v1.Insight + * @instance + */ + Insight.prototype.associatedRecommendations = $util.emptyArray; + + /** + * Creates a new Insight instance using the specified properties. * @function create - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @static - * @param {google.cloud.recommender.v1.IRecommendation=} [properties] Properties to set - * @returns {google.cloud.recommender.v1.Recommendation} Recommendation instance + * @param {google.cloud.recommender.v1.IInsight=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.Insight} Insight instance */ - Recommendation.create = function create(properties) { - return new Recommendation(properties); + Insight.create = function create(properties) { + return new Insight(properties); }; /** - * Encodes the specified Recommendation message. Does not implicitly {@link google.cloud.recommender.v1.Recommendation.verify|verify} messages. + * Encodes the specified Insight message. Does not implicitly {@link google.cloud.recommender.v1.Insight.verify|verify} messages. * @function encode - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @static - * @param {google.cloud.recommender.v1.IRecommendation} message Recommendation message or plain object to encode + * @param {google.cloud.recommender.v1.IInsight} message Insight message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Recommendation.encode = function encode(message, writer) { + Insight.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); if (message.name != null && Object.hasOwnProperty.call(message, "name")) writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); if (message.description != null && Object.hasOwnProperty.call(message, "description")) writer.uint32(/* id 2, wireType 2 =*/18).string(message.description); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + $root.google.protobuf.Struct.encode(message.content, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); if (message.lastRefreshTime != null && Object.hasOwnProperty.call(message, "lastRefreshTime")) $root.google.protobuf.Timestamp.encode(message.lastRefreshTime, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); - if (message.primaryImpact != null && Object.hasOwnProperty.call(message, "primaryImpact")) - $root.google.cloud.recommender.v1.Impact.encode(message.primaryImpact, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); - if (message.additionalImpact != null && message.additionalImpact.length) - for (var i = 0; i < message.additionalImpact.length; ++i) - $root.google.cloud.recommender.v1.Impact.encode(message.additionalImpact[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); - if (message.content != null && Object.hasOwnProperty.call(message, "content")) - $root.google.cloud.recommender.v1.RecommendationContent.encode(message.content, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.observationPeriod != null && Object.hasOwnProperty.call(message, "observationPeriod")) + $root.google.protobuf.Duration.encode(message.observationPeriod, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); if (message.stateInfo != null && Object.hasOwnProperty.call(message, "stateInfo")) - $root.google.cloud.recommender.v1.RecommendationStateInfo.encode(message.stateInfo, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim(); + $root.google.cloud.recommender.v1.InsightStateInfo.encode(message.stateInfo, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.category != null && Object.hasOwnProperty.call(message, "category")) + writer.uint32(/* id 7, wireType 0 =*/56).int32(message.category); + if (message.associatedRecommendations != null && message.associatedRecommendations.length) + for (var i = 0; i < message.associatedRecommendations.length; ++i) + $root.google.cloud.recommender.v1.Insight.RecommendationReference.encode(message.associatedRecommendations[i], writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); + if (message.targetResources != null && message.targetResources.length) + for (var i = 0; i < message.targetResources.length; ++i) + writer.uint32(/* id 9, wireType 2 =*/74).string(message.targetResources[i]); + if (message.insightSubtype != null && Object.hasOwnProperty.call(message, "insightSubtype")) + writer.uint32(/* id 10, wireType 2 =*/82).string(message.insightSubtype); if (message.etag != null && Object.hasOwnProperty.call(message, "etag")) writer.uint32(/* id 11, wireType 2 =*/90).string(message.etag); - if (message.recommenderSubtype != null && Object.hasOwnProperty.call(message, "recommenderSubtype")) - writer.uint32(/* id 12, wireType 2 =*/98).string(message.recommenderSubtype); return writer; }; /** - * Encodes the specified Recommendation message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Recommendation.verify|verify} messages. + * Encodes the specified Insight message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Insight.verify|verify} messages. * @function encodeDelimited - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @static - * @param {google.cloud.recommender.v1.IRecommendation} message Recommendation message or plain object to encode + * @param {google.cloud.recommender.v1.IInsight} message Insight message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Recommendation.encodeDelimited = function encodeDelimited(message, writer) { + Insight.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a Recommendation message from the specified reader or buffer. + * Decodes an Insight message from the specified reader or buffer. * @function decode - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.recommender.v1.Recommendation} Recommendation + * @returns {google.cloud.recommender.v1.Insight} Insight * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Recommendation.decode = function decode(reader, length) { + Insight.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Recommendation(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Insight(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { @@ -254,29 +278,37 @@ case 2: message.description = reader.string(); break; - case 12: - message.recommenderSubtype = reader.string(); + case 9: + if (!(message.targetResources && message.targetResources.length)) + message.targetResources = []; + message.targetResources.push(reader.string()); + break; + case 10: + message.insightSubtype = reader.string(); + break; + case 3: + message.content = $root.google.protobuf.Struct.decode(reader, reader.uint32()); break; case 4: message.lastRefreshTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32()); break; case 5: - message.primaryImpact = $root.google.cloud.recommender.v1.Impact.decode(reader, reader.uint32()); + message.observationPeriod = $root.google.protobuf.Duration.decode(reader, reader.uint32()); break; case 6: - if (!(message.additionalImpact && message.additionalImpact.length)) - message.additionalImpact = []; - message.additionalImpact.push($root.google.cloud.recommender.v1.Impact.decode(reader, reader.uint32())); + message.stateInfo = $root.google.cloud.recommender.v1.InsightStateInfo.decode(reader, reader.uint32()); break; case 7: - message.content = $root.google.cloud.recommender.v1.RecommendationContent.decode(reader, reader.uint32()); - break; - case 10: - message.stateInfo = $root.google.cloud.recommender.v1.RecommendationStateInfo.decode(reader, reader.uint32()); + message.category = reader.int32(); break; case 11: message.etag = reader.string(); break; + case 8: + if (!(message.associatedRecommendations && message.associatedRecommendations.length)) + message.associatedRecommendations = []; + message.associatedRecommendations.push($root.google.cloud.recommender.v1.Insight.RecommendationReference.decode(reader, reader.uint32())); + break; default: reader.skipType(tag & 7); break; @@ -286,30 +318,30 @@ }; /** - * Decodes a Recommendation message from the specified reader or buffer, length delimited. + * Decodes an Insight message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.recommender.v1.Recommendation} Recommendation + * @returns {google.cloud.recommender.v1.Insight} Insight * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Recommendation.decodeDelimited = function decodeDelimited(reader) { + Insight.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a Recommendation message. + * Verifies an Insight message. * @function verify - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - Recommendation.verify = function verify(message) { + Insight.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; if (message.name != null && message.hasOwnProperty("name")) @@ -318,179 +350,444 @@ if (message.description != null && message.hasOwnProperty("description")) if (!$util.isString(message.description)) return "description: string expected"; - if (message.recommenderSubtype != null && message.hasOwnProperty("recommenderSubtype")) - if (!$util.isString(message.recommenderSubtype)) - return "recommenderSubtype: 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"; + } + if (message.insightSubtype != null && message.hasOwnProperty("insightSubtype")) + if (!$util.isString(message.insightSubtype)) + return "insightSubtype: string expected"; + if (message.content != null && message.hasOwnProperty("content")) { + var error = $root.google.protobuf.Struct.verify(message.content); + if (error) + return "content." + error; + } if (message.lastRefreshTime != null && message.hasOwnProperty("lastRefreshTime")) { var error = $root.google.protobuf.Timestamp.verify(message.lastRefreshTime); if (error) return "lastRefreshTime." + error; } - if (message.primaryImpact != null && message.hasOwnProperty("primaryImpact")) { - var error = $root.google.cloud.recommender.v1.Impact.verify(message.primaryImpact); - if (error) - return "primaryImpact." + error; - } - if (message.additionalImpact != null && message.hasOwnProperty("additionalImpact")) { - if (!Array.isArray(message.additionalImpact)) - return "additionalImpact: array expected"; - for (var i = 0; i < message.additionalImpact.length; ++i) { - var error = $root.google.cloud.recommender.v1.Impact.verify(message.additionalImpact[i]); - if (error) - return "additionalImpact." + error; - } - } - if (message.content != null && message.hasOwnProperty("content")) { - var error = $root.google.cloud.recommender.v1.RecommendationContent.verify(message.content); + if (message.observationPeriod != null && message.hasOwnProperty("observationPeriod")) { + var error = $root.google.protobuf.Duration.verify(message.observationPeriod); if (error) - return "content." + error; + return "observationPeriod." + error; } if (message.stateInfo != null && message.hasOwnProperty("stateInfo")) { - var error = $root.google.cloud.recommender.v1.RecommendationStateInfo.verify(message.stateInfo); + var error = $root.google.cloud.recommender.v1.InsightStateInfo.verify(message.stateInfo); if (error) return "stateInfo." + error; } + if (message.category != null && message.hasOwnProperty("category")) + switch (message.category) { + default: + return "category: enum value expected"; + case 0: + case 1: + case 2: + case 3: + case 4: + break; + } if (message.etag != null && message.hasOwnProperty("etag")) if (!$util.isString(message.etag)) return "etag: string expected"; + if (message.associatedRecommendations != null && message.hasOwnProperty("associatedRecommendations")) { + if (!Array.isArray(message.associatedRecommendations)) + return "associatedRecommendations: array expected"; + for (var i = 0; i < message.associatedRecommendations.length; ++i) { + var error = $root.google.cloud.recommender.v1.Insight.RecommendationReference.verify(message.associatedRecommendations[i]); + if (error) + return "associatedRecommendations." + error; + } + } return null; }; /** - * Creates a Recommendation message from a plain object. Also converts values to their respective internal types. + * Creates an Insight message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @static * @param {Object.} object Plain object - * @returns {google.cloud.recommender.v1.Recommendation} Recommendation + * @returns {google.cloud.recommender.v1.Insight} Insight */ - Recommendation.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.recommender.v1.Recommendation) + Insight.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.Insight) return object; - var message = new $root.google.cloud.recommender.v1.Recommendation(); + var message = new $root.google.cloud.recommender.v1.Insight(); if (object.name != null) message.name = String(object.name); if (object.description != null) message.description = String(object.description); - if (object.recommenderSubtype != null) - message.recommenderSubtype = String(object.recommenderSubtype); + if (object.targetResources) { + if (!Array.isArray(object.targetResources)) + throw TypeError(".google.cloud.recommender.v1.Insight.targetResources: array expected"); + message.targetResources = []; + for (var i = 0; i < object.targetResources.length; ++i) + message.targetResources[i] = String(object.targetResources[i]); + } + if (object.insightSubtype != null) + message.insightSubtype = String(object.insightSubtype); + if (object.content != null) { + if (typeof object.content !== "object") + throw TypeError(".google.cloud.recommender.v1.Insight.content: object expected"); + message.content = $root.google.protobuf.Struct.fromObject(object.content); + } if (object.lastRefreshTime != null) { if (typeof object.lastRefreshTime !== "object") - throw TypeError(".google.cloud.recommender.v1.Recommendation.lastRefreshTime: object expected"); + throw TypeError(".google.cloud.recommender.v1.Insight.lastRefreshTime: object expected"); message.lastRefreshTime = $root.google.protobuf.Timestamp.fromObject(object.lastRefreshTime); } - if (object.primaryImpact != null) { - if (typeof object.primaryImpact !== "object") - throw TypeError(".google.cloud.recommender.v1.Recommendation.primaryImpact: object expected"); - message.primaryImpact = $root.google.cloud.recommender.v1.Impact.fromObject(object.primaryImpact); - } - if (object.additionalImpact) { - if (!Array.isArray(object.additionalImpact)) - throw TypeError(".google.cloud.recommender.v1.Recommendation.additionalImpact: array expected"); - message.additionalImpact = []; - for (var i = 0; i < object.additionalImpact.length; ++i) { - if (typeof object.additionalImpact[i] !== "object") - throw TypeError(".google.cloud.recommender.v1.Recommendation.additionalImpact: object expected"); - message.additionalImpact[i] = $root.google.cloud.recommender.v1.Impact.fromObject(object.additionalImpact[i]); - } - } - if (object.content != null) { - if (typeof object.content !== "object") - throw TypeError(".google.cloud.recommender.v1.Recommendation.content: object expected"); - message.content = $root.google.cloud.recommender.v1.RecommendationContent.fromObject(object.content); + if (object.observationPeriod != null) { + if (typeof object.observationPeriod !== "object") + throw TypeError(".google.cloud.recommender.v1.Insight.observationPeriod: object expected"); + message.observationPeriod = $root.google.protobuf.Duration.fromObject(object.observationPeriod); } if (object.stateInfo != null) { if (typeof object.stateInfo !== "object") - throw TypeError(".google.cloud.recommender.v1.Recommendation.stateInfo: object expected"); - message.stateInfo = $root.google.cloud.recommender.v1.RecommendationStateInfo.fromObject(object.stateInfo); + throw TypeError(".google.cloud.recommender.v1.Insight.stateInfo: object expected"); + message.stateInfo = $root.google.cloud.recommender.v1.InsightStateInfo.fromObject(object.stateInfo); + } + switch (object.category) { + case "CATEGORY_UNSPECIFIED": + case 0: + message.category = 0; + break; + case "COST": + case 1: + message.category = 1; + break; + case "SECURITY": + case 2: + message.category = 2; + break; + case "PERFORMANCE": + case 3: + message.category = 3; + break; + case "MANAGEABILITY": + case 4: + message.category = 4; + break; } if (object.etag != null) message.etag = String(object.etag); + if (object.associatedRecommendations) { + if (!Array.isArray(object.associatedRecommendations)) + throw TypeError(".google.cloud.recommender.v1.Insight.associatedRecommendations: array expected"); + message.associatedRecommendations = []; + for (var i = 0; i < object.associatedRecommendations.length; ++i) { + if (typeof object.associatedRecommendations[i] !== "object") + throw TypeError(".google.cloud.recommender.v1.Insight.associatedRecommendations: object expected"); + message.associatedRecommendations[i] = $root.google.cloud.recommender.v1.Insight.RecommendationReference.fromObject(object.associatedRecommendations[i]); + } + } return message; }; /** - * Creates a plain object from a Recommendation message. Also converts values to other types if specified. + * Creates a plain object from an Insight message. Also converts values to other types if specified. * @function toObject - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @static - * @param {google.cloud.recommender.v1.Recommendation} message Recommendation + * @param {google.cloud.recommender.v1.Insight} message Insight * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - Recommendation.toObject = function toObject(message, options) { + Insight.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) - object.additionalImpact = []; + if (options.arrays || options.defaults) { + object.associatedRecommendations = []; + object.targetResources = []; + } if (options.defaults) { object.name = ""; object.description = ""; - object.lastRefreshTime = null; - object.primaryImpact = null; object.content = null; + object.lastRefreshTime = null; + object.observationPeriod = null; object.stateInfo = null; + object.category = options.enums === String ? "CATEGORY_UNSPECIFIED" : 0; + object.insightSubtype = ""; object.etag = ""; - object.recommenderSubtype = ""; } if (message.name != null && message.hasOwnProperty("name")) object.name = message.name; if (message.description != null && message.hasOwnProperty("description")) object.description = message.description; + if (message.content != null && message.hasOwnProperty("content")) + object.content = $root.google.protobuf.Struct.toObject(message.content, options); if (message.lastRefreshTime != null && message.hasOwnProperty("lastRefreshTime")) object.lastRefreshTime = $root.google.protobuf.Timestamp.toObject(message.lastRefreshTime, options); - if (message.primaryImpact != null && message.hasOwnProperty("primaryImpact")) - object.primaryImpact = $root.google.cloud.recommender.v1.Impact.toObject(message.primaryImpact, options); - if (message.additionalImpact && message.additionalImpact.length) { - object.additionalImpact = []; - for (var j = 0; j < message.additionalImpact.length; ++j) - object.additionalImpact[j] = $root.google.cloud.recommender.v1.Impact.toObject(message.additionalImpact[j], options); - } - if (message.content != null && message.hasOwnProperty("content")) - object.content = $root.google.cloud.recommender.v1.RecommendationContent.toObject(message.content, options); + if (message.observationPeriod != null && message.hasOwnProperty("observationPeriod")) + object.observationPeriod = $root.google.protobuf.Duration.toObject(message.observationPeriod, options); if (message.stateInfo != null && message.hasOwnProperty("stateInfo")) - object.stateInfo = $root.google.cloud.recommender.v1.RecommendationStateInfo.toObject(message.stateInfo, options); + object.stateInfo = $root.google.cloud.recommender.v1.InsightStateInfo.toObject(message.stateInfo, options); + if (message.category != null && message.hasOwnProperty("category")) + object.category = options.enums === String ? $root.google.cloud.recommender.v1.Insight.Category[message.category] : message.category; + if (message.associatedRecommendations && message.associatedRecommendations.length) { + object.associatedRecommendations = []; + for (var j = 0; j < message.associatedRecommendations.length; ++j) + object.associatedRecommendations[j] = $root.google.cloud.recommender.v1.Insight.RecommendationReference.toObject(message.associatedRecommendations[j], options); + } + if (message.targetResources && message.targetResources.length) { + object.targetResources = []; + for (var j = 0; j < message.targetResources.length; ++j) + object.targetResources[j] = message.targetResources[j]; + } + if (message.insightSubtype != null && message.hasOwnProperty("insightSubtype")) + object.insightSubtype = message.insightSubtype; if (message.etag != null && message.hasOwnProperty("etag")) object.etag = message.etag; - if (message.recommenderSubtype != null && message.hasOwnProperty("recommenderSubtype")) - object.recommenderSubtype = message.recommenderSubtype; return object; }; /** - * Converts this Recommendation to JSON. + * Converts this Insight to JSON. * @function toJSON - * @memberof google.cloud.recommender.v1.Recommendation + * @memberof google.cloud.recommender.v1.Insight * @instance * @returns {Object.} JSON object */ - Recommendation.prototype.toJSON = function toJSON() { + Insight.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return Recommendation; - })(); + Insight.RecommendationReference = (function() { + + /** + * Properties of a RecommendationReference. + * @memberof google.cloud.recommender.v1.Insight + * @interface IRecommendationReference + * @property {string|null} [recommendation] RecommendationReference recommendation + */ + + /** + * Constructs a new RecommendationReference. + * @memberof google.cloud.recommender.v1.Insight + * @classdesc Represents a RecommendationReference. + * @implements IRecommendationReference + * @constructor + * @param {google.cloud.recommender.v1.Insight.IRecommendationReference=} [properties] Properties to set + */ + function RecommendationReference(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } - v1.RecommendationContent = (function() { + /** + * RecommendationReference recommendation. + * @member {string} recommendation + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @instance + */ + RecommendationReference.prototype.recommendation = ""; + + /** + * Creates a new RecommendationReference instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @static + * @param {google.cloud.recommender.v1.Insight.IRecommendationReference=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.Insight.RecommendationReference} RecommendationReference instance + */ + RecommendationReference.create = function create(properties) { + return new RecommendationReference(properties); + }; + + /** + * Encodes the specified RecommendationReference message. Does not implicitly {@link google.cloud.recommender.v1.Insight.RecommendationReference.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @static + * @param {google.cloud.recommender.v1.Insight.IRecommendationReference} message RecommendationReference message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RecommendationReference.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.recommendation != null && Object.hasOwnProperty.call(message, "recommendation")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.recommendation); + return writer; + }; + + /** + * Encodes the specified RecommendationReference message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Insight.RecommendationReference.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @static + * @param {google.cloud.recommender.v1.Insight.IRecommendationReference} message RecommendationReference message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RecommendationReference.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a RecommendationReference message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.Insight.RecommendationReference} RecommendationReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RecommendationReference.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Insight.RecommendationReference(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.recommendation = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a RecommendationReference message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.Insight.RecommendationReference} RecommendationReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RecommendationReference.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a RecommendationReference message. + * @function verify + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + RecommendationReference.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.recommendation != null && message.hasOwnProperty("recommendation")) + if (!$util.isString(message.recommendation)) + return "recommendation: string expected"; + return null; + }; + + /** + * Creates a RecommendationReference message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.Insight.RecommendationReference} RecommendationReference + */ + RecommendationReference.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.Insight.RecommendationReference) + return object; + var message = new $root.google.cloud.recommender.v1.Insight.RecommendationReference(); + if (object.recommendation != null) + message.recommendation = String(object.recommendation); + return message; + }; + + /** + * Creates a plain object from a RecommendationReference message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @static + * @param {google.cloud.recommender.v1.Insight.RecommendationReference} message RecommendationReference + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + RecommendationReference.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.recommendation = ""; + if (message.recommendation != null && message.hasOwnProperty("recommendation")) + object.recommendation = message.recommendation; + return object; + }; + + /** + * Converts this RecommendationReference to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.Insight.RecommendationReference + * @instance + * @returns {Object.} JSON object + */ + RecommendationReference.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return RecommendationReference; + })(); /** - * Properties of a RecommendationContent. - * @memberof google.cloud.recommender.v1 - * @interface IRecommendationContent - * @property {Array.|null} [operationGroups] RecommendationContent operationGroups - */ + * Category enum. + * @name google.cloud.recommender.v1.Insight.Category + * @enum {number} + * @property {number} CATEGORY_UNSPECIFIED=0 CATEGORY_UNSPECIFIED value + * @property {number} COST=1 COST value + * @property {number} SECURITY=2 SECURITY value + * @property {number} PERFORMANCE=3 PERFORMANCE value + * @property {number} MANAGEABILITY=4 MANAGEABILITY value + */ + Insight.Category = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "CATEGORY_UNSPECIFIED"] = 0; + values[valuesById[1] = "COST"] = 1; + values[valuesById[2] = "SECURITY"] = 2; + values[valuesById[3] = "PERFORMANCE"] = 3; + values[valuesById[4] = "MANAGEABILITY"] = 4; + return values; + })(); + + return Insight; + })(); + + v1.InsightStateInfo = (function() { /** - * Constructs a new RecommendationContent. + * Properties of an InsightStateInfo. * @memberof google.cloud.recommender.v1 - * @classdesc Represents a RecommendationContent. - * @implements IRecommendationContent + * @interface IInsightStateInfo + * @property {google.cloud.recommender.v1.InsightStateInfo.State|null} [state] InsightStateInfo state + * @property {Object.|null} [stateMetadata] InsightStateInfo stateMetadata + */ + + /** + * Constructs a new InsightStateInfo. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents an InsightStateInfo. + * @implements IInsightStateInfo * @constructor - * @param {google.cloud.recommender.v1.IRecommendationContent=} [properties] Properties to set + * @param {google.cloud.recommender.v1.IInsightStateInfo=} [properties] Properties to set */ - function RecommendationContent(properties) { - this.operationGroups = []; + function InsightStateInfo(properties) { + this.stateMetadata = {}; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -498,78 +795,94 @@ } /** - * RecommendationContent operationGroups. - * @member {Array.} operationGroups - * @memberof google.cloud.recommender.v1.RecommendationContent + * InsightStateInfo state. + * @member {google.cloud.recommender.v1.InsightStateInfo.State} state + * @memberof google.cloud.recommender.v1.InsightStateInfo * @instance */ - RecommendationContent.prototype.operationGroups = $util.emptyArray; + InsightStateInfo.prototype.state = 0; /** - * Creates a new RecommendationContent instance using the specified properties. + * InsightStateInfo stateMetadata. + * @member {Object.} stateMetadata + * @memberof google.cloud.recommender.v1.InsightStateInfo + * @instance + */ + InsightStateInfo.prototype.stateMetadata = $util.emptyObject; + + /** + * Creates a new InsightStateInfo instance using the specified properties. * @function create - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @static - * @param {google.cloud.recommender.v1.IRecommendationContent=} [properties] Properties to set - * @returns {google.cloud.recommender.v1.RecommendationContent} RecommendationContent instance + * @param {google.cloud.recommender.v1.IInsightStateInfo=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.InsightStateInfo} InsightStateInfo instance */ - RecommendationContent.create = function create(properties) { - return new RecommendationContent(properties); + InsightStateInfo.create = function create(properties) { + return new InsightStateInfo(properties); }; /** - * Encodes the specified RecommendationContent message. Does not implicitly {@link google.cloud.recommender.v1.RecommendationContent.verify|verify} messages. + * Encodes the specified InsightStateInfo message. Does not implicitly {@link google.cloud.recommender.v1.InsightStateInfo.verify|verify} messages. * @function encode - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @static - * @param {google.cloud.recommender.v1.IRecommendationContent} message RecommendationContent message or plain object to encode + * @param {google.cloud.recommender.v1.IInsightStateInfo} message InsightStateInfo message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - RecommendationContent.encode = function encode(message, writer) { + InsightStateInfo.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.operationGroups != null && message.operationGroups.length) - for (var i = 0; i < message.operationGroups.length; ++i) - $root.google.cloud.recommender.v1.OperationGroup.encode(message.operationGroups[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + if (message.state != null && Object.hasOwnProperty.call(message, "state")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.state); + if (message.stateMetadata != null && Object.hasOwnProperty.call(message, "stateMetadata")) + for (var keys = Object.keys(message.stateMetadata), i = 0; i < keys.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.stateMetadata[keys[i]]).ldelim(); return writer; }; /** - * Encodes the specified RecommendationContent message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.RecommendationContent.verify|verify} messages. + * Encodes the specified InsightStateInfo message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.InsightStateInfo.verify|verify} messages. * @function encodeDelimited - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @static - * @param {google.cloud.recommender.v1.IRecommendationContent} message RecommendationContent message or plain object to encode + * @param {google.cloud.recommender.v1.IInsightStateInfo} message InsightStateInfo message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - RecommendationContent.encodeDelimited = function encodeDelimited(message, writer) { + InsightStateInfo.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a RecommendationContent message from the specified reader or buffer. + * Decodes an InsightStateInfo message from the specified reader or buffer. * @function decode - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.recommender.v1.RecommendationContent} RecommendationContent + * @returns {google.cloud.recommender.v1.InsightStateInfo} InsightStateInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - RecommendationContent.decode = function decode(reader, length) { + InsightStateInfo.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.RecommendationContent(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.InsightStateInfo(), key; while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { + case 1: + message.state = reader.int32(); + break; case 2: - if (!(message.operationGroups && message.operationGroups.length)) - message.operationGroups = []; - message.operationGroups.push($root.google.cloud.recommender.v1.OperationGroup.decode(reader, reader.uint32())); + reader.skip().pos++; + if (message.stateMetadata === $util.emptyObject) + message.stateMetadata = {}; + key = reader.string(); + reader.pos++; + message.stateMetadata[key] = reader.string(); break; default: reader.skipType(tag & 7); @@ -580,125 +893,182 @@ }; /** - * Decodes a RecommendationContent message from the specified reader or buffer, length delimited. + * Decodes an InsightStateInfo message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.recommender.v1.RecommendationContent} RecommendationContent + * @returns {google.cloud.recommender.v1.InsightStateInfo} InsightStateInfo * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - RecommendationContent.decodeDelimited = function decodeDelimited(reader) { + InsightStateInfo.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a RecommendationContent message. + * Verifies an InsightStateInfo message. * @function verify - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - RecommendationContent.verify = function verify(message) { + InsightStateInfo.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.operationGroups != null && message.hasOwnProperty("operationGroups")) { - if (!Array.isArray(message.operationGroups)) - return "operationGroups: array expected"; - for (var i = 0; i < message.operationGroups.length; ++i) { - var error = $root.google.cloud.recommender.v1.OperationGroup.verify(message.operationGroups[i]); - if (error) - return "operationGroups." + error; + if (message.state != null && message.hasOwnProperty("state")) + switch (message.state) { + default: + return "state: enum value expected"; + case 0: + case 1: + case 2: + case 3: + break; } + if (message.stateMetadata != null && message.hasOwnProperty("stateMetadata")) { + if (!$util.isObject(message.stateMetadata)) + return "stateMetadata: object expected"; + var key = Object.keys(message.stateMetadata); + for (var i = 0; i < key.length; ++i) + if (!$util.isString(message.stateMetadata[key[i]])) + return "stateMetadata: string{k:string} expected"; } return null; }; /** - * Creates a RecommendationContent message from a plain object. Also converts values to their respective internal types. + * Creates an InsightStateInfo message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @static * @param {Object.} object Plain object - * @returns {google.cloud.recommender.v1.RecommendationContent} RecommendationContent + * @returns {google.cloud.recommender.v1.InsightStateInfo} InsightStateInfo */ - RecommendationContent.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.recommender.v1.RecommendationContent) + InsightStateInfo.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.InsightStateInfo) return object; - var message = new $root.google.cloud.recommender.v1.RecommendationContent(); - if (object.operationGroups) { - if (!Array.isArray(object.operationGroups)) - throw TypeError(".google.cloud.recommender.v1.RecommendationContent.operationGroups: array expected"); - message.operationGroups = []; - for (var i = 0; i < object.operationGroups.length; ++i) { - if (typeof object.operationGroups[i] !== "object") - throw TypeError(".google.cloud.recommender.v1.RecommendationContent.operationGroups: object expected"); - message.operationGroups[i] = $root.google.cloud.recommender.v1.OperationGroup.fromObject(object.operationGroups[i]); - } + var message = new $root.google.cloud.recommender.v1.InsightStateInfo(); + switch (object.state) { + case "STATE_UNSPECIFIED": + case 0: + message.state = 0; + break; + case "ACTIVE": + case 1: + message.state = 1; + break; + case "ACCEPTED": + case 2: + message.state = 2; + break; + case "DISMISSED": + case 3: + message.state = 3; + break; + } + if (object.stateMetadata) { + if (typeof object.stateMetadata !== "object") + throw TypeError(".google.cloud.recommender.v1.InsightStateInfo.stateMetadata: object expected"); + message.stateMetadata = {}; + for (var keys = Object.keys(object.stateMetadata), i = 0; i < keys.length; ++i) + message.stateMetadata[keys[i]] = String(object.stateMetadata[keys[i]]); } return message; }; /** - * Creates a plain object from a RecommendationContent message. Also converts values to other types if specified. + * Creates a plain object from an InsightStateInfo message. Also converts values to other types if specified. * @function toObject - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @static - * @param {google.cloud.recommender.v1.RecommendationContent} message RecommendationContent + * @param {google.cloud.recommender.v1.InsightStateInfo} message InsightStateInfo * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - RecommendationContent.toObject = function toObject(message, options) { + InsightStateInfo.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) - object.operationGroups = []; - if (message.operationGroups && message.operationGroups.length) { - object.operationGroups = []; - for (var j = 0; j < message.operationGroups.length; ++j) - object.operationGroups[j] = $root.google.cloud.recommender.v1.OperationGroup.toObject(message.operationGroups[j], options); + if (options.objects || options.defaults) + object.stateMetadata = {}; + if (options.defaults) + object.state = options.enums === String ? "STATE_UNSPECIFIED" : 0; + if (message.state != null && message.hasOwnProperty("state")) + object.state = options.enums === String ? $root.google.cloud.recommender.v1.InsightStateInfo.State[message.state] : message.state; + var keys2; + if (message.stateMetadata && (keys2 = Object.keys(message.stateMetadata)).length) { + object.stateMetadata = {}; + for (var j = 0; j < keys2.length; ++j) + object.stateMetadata[keys2[j]] = message.stateMetadata[keys2[j]]; } return object; }; /** - * Converts this RecommendationContent to JSON. + * Converts this InsightStateInfo to JSON. * @function toJSON - * @memberof google.cloud.recommender.v1.RecommendationContent + * @memberof google.cloud.recommender.v1.InsightStateInfo * @instance * @returns {Object.} JSON object */ - RecommendationContent.prototype.toJSON = function toJSON() { + InsightStateInfo.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return RecommendationContent; + /** + * State enum. + * @name google.cloud.recommender.v1.InsightStateInfo.State + * @enum {number} + * @property {number} STATE_UNSPECIFIED=0 STATE_UNSPECIFIED value + * @property {number} ACTIVE=1 ACTIVE value + * @property {number} ACCEPTED=2 ACCEPTED value + * @property {number} DISMISSED=3 DISMISSED value + */ + InsightStateInfo.State = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "STATE_UNSPECIFIED"] = 0; + values[valuesById[1] = "ACTIVE"] = 1; + values[valuesById[2] = "ACCEPTED"] = 2; + values[valuesById[3] = "DISMISSED"] = 3; + return values; + })(); + + return InsightStateInfo; })(); - v1.OperationGroup = (function() { + v1.Recommendation = (function() { /** - * Properties of an OperationGroup. + * Properties of a Recommendation. * @memberof google.cloud.recommender.v1 - * @interface IOperationGroup - * @property {Array.|null} [operations] OperationGroup operations + * @interface IRecommendation + * @property {string|null} [name] Recommendation name + * @property {string|null} [description] Recommendation description + * @property {string|null} [recommenderSubtype] Recommendation recommenderSubtype + * @property {google.protobuf.ITimestamp|null} [lastRefreshTime] Recommendation lastRefreshTime + * @property {google.cloud.recommender.v1.IImpact|null} [primaryImpact] Recommendation primaryImpact + * @property {Array.|null} [additionalImpact] Recommendation additionalImpact + * @property {google.cloud.recommender.v1.IRecommendationContent|null} [content] Recommendation content + * @property {google.cloud.recommender.v1.IRecommendationStateInfo|null} [stateInfo] Recommendation stateInfo + * @property {string|null} [etag] Recommendation etag + * @property {Array.|null} [associatedInsights] Recommendation associatedInsights */ /** - * Constructs a new OperationGroup. + * Constructs a new Recommendation. * @memberof google.cloud.recommender.v1 - * @classdesc Represents an OperationGroup. - * @implements IOperationGroup + * @classdesc Represents a Recommendation. + * @implements IRecommendation * @constructor - * @param {google.cloud.recommender.v1.IOperationGroup=} [properties] Properties to set + * @param {google.cloud.recommender.v1.IRecommendation=} [properties] Properties to set */ - function OperationGroup(properties) { - this.operations = []; + function Recommendation(properties) { + this.additionalImpact = []; + this.associatedInsights = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -706,78 +1076,198 @@ } /** - * OperationGroup operations. - * @member {Array.} operations - * @memberof google.cloud.recommender.v1.OperationGroup + * Recommendation name. + * @member {string} name + * @memberof google.cloud.recommender.v1.Recommendation * @instance */ - OperationGroup.prototype.operations = $util.emptyArray; + Recommendation.prototype.name = ""; /** - * Creates a new OperationGroup instance using the specified properties. - * @function create - * @memberof google.cloud.recommender.v1.OperationGroup - * @static - * @param {google.cloud.recommender.v1.IOperationGroup=} [properties] Properties to set - * @returns {google.cloud.recommender.v1.OperationGroup} OperationGroup instance + * Recommendation description. + * @member {string} description + * @memberof google.cloud.recommender.v1.Recommendation + * @instance */ - OperationGroup.create = function create(properties) { - return new OperationGroup(properties); - }; + Recommendation.prototype.description = ""; /** - * Encodes the specified OperationGroup message. Does not implicitly {@link google.cloud.recommender.v1.OperationGroup.verify|verify} messages. - * @function encode - * @memberof google.cloud.recommender.v1.OperationGroup - * @static - * @param {google.cloud.recommender.v1.IOperationGroup} message OperationGroup message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer + * Recommendation recommenderSubtype. + * @member {string} recommenderSubtype + * @memberof google.cloud.recommender.v1.Recommendation + * @instance */ - OperationGroup.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.operations != null && message.operations.length) - for (var i = 0; i < message.operations.length; ++i) - $root.google.cloud.recommender.v1.Operation.encode(message.operations[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; + Recommendation.prototype.recommenderSubtype = ""; /** - * Encodes the specified OperationGroup message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.OperationGroup.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.recommender.v1.OperationGroup - * @static - * @param {google.cloud.recommender.v1.IOperationGroup} message OperationGroup message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to + * Recommendation lastRefreshTime. + * @member {google.protobuf.ITimestamp|null|undefined} lastRefreshTime + * @memberof google.cloud.recommender.v1.Recommendation + * @instance + */ + Recommendation.prototype.lastRefreshTime = null; + + /** + * Recommendation primaryImpact. + * @member {google.cloud.recommender.v1.IImpact|null|undefined} primaryImpact + * @memberof google.cloud.recommender.v1.Recommendation + * @instance + */ + Recommendation.prototype.primaryImpact = null; + + /** + * Recommendation additionalImpact. + * @member {Array.} additionalImpact + * @memberof google.cloud.recommender.v1.Recommendation + * @instance + */ + Recommendation.prototype.additionalImpact = $util.emptyArray; + + /** + * Recommendation content. + * @member {google.cloud.recommender.v1.IRecommendationContent|null|undefined} content + * @memberof google.cloud.recommender.v1.Recommendation + * @instance + */ + Recommendation.prototype.content = null; + + /** + * Recommendation stateInfo. + * @member {google.cloud.recommender.v1.IRecommendationStateInfo|null|undefined} stateInfo + * @memberof google.cloud.recommender.v1.Recommendation + * @instance + */ + Recommendation.prototype.stateInfo = null; + + /** + * Recommendation etag. + * @member {string} etag + * @memberof google.cloud.recommender.v1.Recommendation + * @instance + */ + Recommendation.prototype.etag = ""; + + /** + * Recommendation associatedInsights. + * @member {Array.} associatedInsights + * @memberof google.cloud.recommender.v1.Recommendation + * @instance + */ + Recommendation.prototype.associatedInsights = $util.emptyArray; + + /** + * Creates a new Recommendation instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.Recommendation + * @static + * @param {google.cloud.recommender.v1.IRecommendation=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.Recommendation} Recommendation instance + */ + Recommendation.create = function create(properties) { + return new Recommendation(properties); + }; + + /** + * Encodes the specified Recommendation message. Does not implicitly {@link google.cloud.recommender.v1.Recommendation.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.Recommendation + * @static + * @param {google.cloud.recommender.v1.IRecommendation} message Recommendation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - OperationGroup.encodeDelimited = function encodeDelimited(message, writer) { + Recommendation.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.description != null && Object.hasOwnProperty.call(message, "description")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.description); + if (message.lastRefreshTime != null && Object.hasOwnProperty.call(message, "lastRefreshTime")) + $root.google.protobuf.Timestamp.encode(message.lastRefreshTime, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.primaryImpact != null && Object.hasOwnProperty.call(message, "primaryImpact")) + $root.google.cloud.recommender.v1.Impact.encode(message.primaryImpact, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); + if (message.additionalImpact != null && message.additionalImpact.length) + for (var i = 0; i < message.additionalImpact.length; ++i) + $root.google.cloud.recommender.v1.Impact.encode(message.additionalImpact[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.content != null && Object.hasOwnProperty.call(message, "content")) + $root.google.cloud.recommender.v1.RecommendationContent.encode(message.content, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.stateInfo != null && Object.hasOwnProperty.call(message, "stateInfo")) + $root.google.cloud.recommender.v1.RecommendationStateInfo.encode(message.stateInfo, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim(); + if (message.etag != null && Object.hasOwnProperty.call(message, "etag")) + writer.uint32(/* id 11, wireType 2 =*/90).string(message.etag); + if (message.recommenderSubtype != null && Object.hasOwnProperty.call(message, "recommenderSubtype")) + writer.uint32(/* id 12, wireType 2 =*/98).string(message.recommenderSubtype); + if (message.associatedInsights != null && message.associatedInsights.length) + for (var i = 0; i < message.associatedInsights.length; ++i) + $root.google.cloud.recommender.v1.Recommendation.InsightReference.encode(message.associatedInsights[i], writer.uint32(/* id 14, wireType 2 =*/114).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified Recommendation message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Recommendation.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.Recommendation + * @static + * @param {google.cloud.recommender.v1.IRecommendation} message Recommendation message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Recommendation.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an OperationGroup message from the specified reader or buffer. + * Decodes a Recommendation message from the specified reader or buffer. * @function decode - * @memberof google.cloud.recommender.v1.OperationGroup + * @memberof google.cloud.recommender.v1.Recommendation * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.recommender.v1.OperationGroup} OperationGroup + * @returns {google.cloud.recommender.v1.Recommendation} Recommendation * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - OperationGroup.decode = function decode(reader, length) { + Recommendation.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.OperationGroup(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Recommendation(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - if (!(message.operations && message.operations.length)) - message.operations = []; - message.operations.push($root.google.cloud.recommender.v1.Operation.decode(reader, reader.uint32())); + message.name = reader.string(); + break; + case 2: + message.description = reader.string(); + break; + case 12: + message.recommenderSubtype = reader.string(); + break; + case 4: + message.lastRefreshTime = $root.google.protobuf.Timestamp.decode(reader, reader.uint32()); + break; + case 5: + message.primaryImpact = $root.google.cloud.recommender.v1.Impact.decode(reader, reader.uint32()); + break; + case 6: + if (!(message.additionalImpact && message.additionalImpact.length)) + message.additionalImpact = []; + message.additionalImpact.push($root.google.cloud.recommender.v1.Impact.decode(reader, reader.uint32())); + break; + case 7: + message.content = $root.google.cloud.recommender.v1.RecommendationContent.decode(reader, reader.uint32()); + break; + case 10: + message.stateInfo = $root.google.cloud.recommender.v1.RecommendationStateInfo.decode(reader, reader.uint32()); + break; + case 11: + message.etag = reader.string(); + break; + case 14: + if (!(message.associatedInsights && message.associatedInsights.length)) + message.associatedInsights = []; + message.associatedInsights.push($root.google.cloud.recommender.v1.Recommendation.InsightReference.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -788,135 +1278,424 @@ }; /** - * Decodes an OperationGroup message from the specified reader or buffer, length delimited. + * Decodes a Recommendation message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.cloud.recommender.v1.OperationGroup + * @memberof google.cloud.recommender.v1.Recommendation * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.recommender.v1.OperationGroup} OperationGroup + * @returns {google.cloud.recommender.v1.Recommendation} Recommendation * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - OperationGroup.decodeDelimited = function decodeDelimited(reader) { + Recommendation.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an OperationGroup message. + * Verifies a Recommendation message. * @function verify - * @memberof google.cloud.recommender.v1.OperationGroup + * @memberof google.cloud.recommender.v1.Recommendation * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - OperationGroup.verify = function verify(message) { + Recommendation.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.operations != null && message.hasOwnProperty("operations")) { - if (!Array.isArray(message.operations)) - return "operations: array expected"; - for (var i = 0; i < message.operations.length; ++i) { - var error = $root.google.cloud.recommender.v1.Operation.verify(message.operations[i]); + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.description != null && message.hasOwnProperty("description")) + if (!$util.isString(message.description)) + return "description: string expected"; + if (message.recommenderSubtype != null && message.hasOwnProperty("recommenderSubtype")) + if (!$util.isString(message.recommenderSubtype)) + return "recommenderSubtype: string expected"; + if (message.lastRefreshTime != null && message.hasOwnProperty("lastRefreshTime")) { + var error = $root.google.protobuf.Timestamp.verify(message.lastRefreshTime); + if (error) + return "lastRefreshTime." + error; + } + if (message.primaryImpact != null && message.hasOwnProperty("primaryImpact")) { + var error = $root.google.cloud.recommender.v1.Impact.verify(message.primaryImpact); + if (error) + return "primaryImpact." + error; + } + if (message.additionalImpact != null && message.hasOwnProperty("additionalImpact")) { + if (!Array.isArray(message.additionalImpact)) + return "additionalImpact: array expected"; + for (var i = 0; i < message.additionalImpact.length; ++i) { + var error = $root.google.cloud.recommender.v1.Impact.verify(message.additionalImpact[i]); if (error) - return "operations." + error; + return "additionalImpact." + error; + } + } + if (message.content != null && message.hasOwnProperty("content")) { + var error = $root.google.cloud.recommender.v1.RecommendationContent.verify(message.content); + if (error) + return "content." + error; + } + if (message.stateInfo != null && message.hasOwnProperty("stateInfo")) { + var error = $root.google.cloud.recommender.v1.RecommendationStateInfo.verify(message.stateInfo); + if (error) + return "stateInfo." + error; + } + if (message.etag != null && message.hasOwnProperty("etag")) + if (!$util.isString(message.etag)) + return "etag: string expected"; + if (message.associatedInsights != null && message.hasOwnProperty("associatedInsights")) { + if (!Array.isArray(message.associatedInsights)) + return "associatedInsights: array expected"; + for (var i = 0; i < message.associatedInsights.length; ++i) { + var error = $root.google.cloud.recommender.v1.Recommendation.InsightReference.verify(message.associatedInsights[i]); + if (error) + return "associatedInsights." + error; } } return null; }; /** - * Creates an OperationGroup message from a plain object. Also converts values to their respective internal types. + * Creates a Recommendation message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.cloud.recommender.v1.OperationGroup + * @memberof google.cloud.recommender.v1.Recommendation * @static * @param {Object.} object Plain object - * @returns {google.cloud.recommender.v1.OperationGroup} OperationGroup + * @returns {google.cloud.recommender.v1.Recommendation} Recommendation */ - OperationGroup.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.recommender.v1.OperationGroup) + Recommendation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.Recommendation) return object; - var message = new $root.google.cloud.recommender.v1.OperationGroup(); - if (object.operations) { - if (!Array.isArray(object.operations)) - throw TypeError(".google.cloud.recommender.v1.OperationGroup.operations: array expected"); - message.operations = []; - for (var i = 0; i < object.operations.length; ++i) { - if (typeof object.operations[i] !== "object") - throw TypeError(".google.cloud.recommender.v1.OperationGroup.operations: object expected"); - message.operations[i] = $root.google.cloud.recommender.v1.Operation.fromObject(object.operations[i]); + var message = new $root.google.cloud.recommender.v1.Recommendation(); + if (object.name != null) + message.name = String(object.name); + if (object.description != null) + message.description = String(object.description); + if (object.recommenderSubtype != null) + message.recommenderSubtype = String(object.recommenderSubtype); + if (object.lastRefreshTime != null) { + if (typeof object.lastRefreshTime !== "object") + throw TypeError(".google.cloud.recommender.v1.Recommendation.lastRefreshTime: object expected"); + message.lastRefreshTime = $root.google.protobuf.Timestamp.fromObject(object.lastRefreshTime); + } + if (object.primaryImpact != null) { + if (typeof object.primaryImpact !== "object") + throw TypeError(".google.cloud.recommender.v1.Recommendation.primaryImpact: object expected"); + message.primaryImpact = $root.google.cloud.recommender.v1.Impact.fromObject(object.primaryImpact); + } + if (object.additionalImpact) { + if (!Array.isArray(object.additionalImpact)) + throw TypeError(".google.cloud.recommender.v1.Recommendation.additionalImpact: array expected"); + message.additionalImpact = []; + for (var i = 0; i < object.additionalImpact.length; ++i) { + if (typeof object.additionalImpact[i] !== "object") + throw TypeError(".google.cloud.recommender.v1.Recommendation.additionalImpact: object expected"); + message.additionalImpact[i] = $root.google.cloud.recommender.v1.Impact.fromObject(object.additionalImpact[i]); } } - return message; - }; - + if (object.content != null) { + if (typeof object.content !== "object") + throw TypeError(".google.cloud.recommender.v1.Recommendation.content: object expected"); + message.content = $root.google.cloud.recommender.v1.RecommendationContent.fromObject(object.content); + } + if (object.stateInfo != null) { + if (typeof object.stateInfo !== "object") + throw TypeError(".google.cloud.recommender.v1.Recommendation.stateInfo: object expected"); + message.stateInfo = $root.google.cloud.recommender.v1.RecommendationStateInfo.fromObject(object.stateInfo); + } + if (object.etag != null) + message.etag = String(object.etag); + if (object.associatedInsights) { + if (!Array.isArray(object.associatedInsights)) + throw TypeError(".google.cloud.recommender.v1.Recommendation.associatedInsights: array expected"); + message.associatedInsights = []; + for (var i = 0; i < object.associatedInsights.length; ++i) { + if (typeof object.associatedInsights[i] !== "object") + throw TypeError(".google.cloud.recommender.v1.Recommendation.associatedInsights: object expected"); + message.associatedInsights[i] = $root.google.cloud.recommender.v1.Recommendation.InsightReference.fromObject(object.associatedInsights[i]); + } + } + return message; + }; + /** - * Creates a plain object from an OperationGroup message. Also converts values to other types if specified. + * Creates a plain object from a Recommendation message. Also converts values to other types if specified. * @function toObject - * @memberof google.cloud.recommender.v1.OperationGroup + * @memberof google.cloud.recommender.v1.Recommendation * @static - * @param {google.cloud.recommender.v1.OperationGroup} message OperationGroup + * @param {google.cloud.recommender.v1.Recommendation} message Recommendation * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - OperationGroup.toObject = function toObject(message, options) { + Recommendation.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.arrays || options.defaults) - object.operations = []; - if (message.operations && message.operations.length) { - object.operations = []; - for (var j = 0; j < message.operations.length; ++j) - object.operations[j] = $root.google.cloud.recommender.v1.Operation.toObject(message.operations[j], options); + if (options.arrays || options.defaults) { + object.additionalImpact = []; + object.associatedInsights = []; + } + if (options.defaults) { + object.name = ""; + object.description = ""; + object.lastRefreshTime = null; + object.primaryImpact = null; + object.content = null; + object.stateInfo = null; + object.etag = ""; + object.recommenderSubtype = ""; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + if (message.description != null && message.hasOwnProperty("description")) + object.description = message.description; + if (message.lastRefreshTime != null && message.hasOwnProperty("lastRefreshTime")) + object.lastRefreshTime = $root.google.protobuf.Timestamp.toObject(message.lastRefreshTime, options); + if (message.primaryImpact != null && message.hasOwnProperty("primaryImpact")) + object.primaryImpact = $root.google.cloud.recommender.v1.Impact.toObject(message.primaryImpact, options); + if (message.additionalImpact && message.additionalImpact.length) { + object.additionalImpact = []; + for (var j = 0; j < message.additionalImpact.length; ++j) + object.additionalImpact[j] = $root.google.cloud.recommender.v1.Impact.toObject(message.additionalImpact[j], options); + } + if (message.content != null && message.hasOwnProperty("content")) + object.content = $root.google.cloud.recommender.v1.RecommendationContent.toObject(message.content, options); + if (message.stateInfo != null && message.hasOwnProperty("stateInfo")) + object.stateInfo = $root.google.cloud.recommender.v1.RecommendationStateInfo.toObject(message.stateInfo, options); + if (message.etag != null && message.hasOwnProperty("etag")) + object.etag = message.etag; + if (message.recommenderSubtype != null && message.hasOwnProperty("recommenderSubtype")) + object.recommenderSubtype = message.recommenderSubtype; + if (message.associatedInsights && message.associatedInsights.length) { + object.associatedInsights = []; + for (var j = 0; j < message.associatedInsights.length; ++j) + object.associatedInsights[j] = $root.google.cloud.recommender.v1.Recommendation.InsightReference.toObject(message.associatedInsights[j], options); } return object; }; /** - * Converts this OperationGroup to JSON. + * Converts this Recommendation to JSON. * @function toJSON - * @memberof google.cloud.recommender.v1.OperationGroup + * @memberof google.cloud.recommender.v1.Recommendation * @instance * @returns {Object.} JSON object */ - OperationGroup.prototype.toJSON = function toJSON() { + Recommendation.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return OperationGroup; + Recommendation.InsightReference = (function() { + + /** + * Properties of an InsightReference. + * @memberof google.cloud.recommender.v1.Recommendation + * @interface IInsightReference + * @property {string|null} [insight] InsightReference insight + */ + + /** + * Constructs a new InsightReference. + * @memberof google.cloud.recommender.v1.Recommendation + * @classdesc Represents an InsightReference. + * @implements IInsightReference + * @constructor + * @param {google.cloud.recommender.v1.Recommendation.IInsightReference=} [properties] Properties to set + */ + function InsightReference(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * InsightReference insight. + * @member {string} insight + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @instance + */ + InsightReference.prototype.insight = ""; + + /** + * Creates a new InsightReference instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @static + * @param {google.cloud.recommender.v1.Recommendation.IInsightReference=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.Recommendation.InsightReference} InsightReference instance + */ + InsightReference.create = function create(properties) { + return new InsightReference(properties); + }; + + /** + * Encodes the specified InsightReference message. Does not implicitly {@link google.cloud.recommender.v1.Recommendation.InsightReference.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @static + * @param {google.cloud.recommender.v1.Recommendation.IInsightReference} message InsightReference message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InsightReference.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.insight != null && Object.hasOwnProperty.call(message, "insight")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.insight); + return writer; + }; + + /** + * Encodes the specified InsightReference message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Recommendation.InsightReference.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @static + * @param {google.cloud.recommender.v1.Recommendation.IInsightReference} message InsightReference message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + InsightReference.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an InsightReference message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.Recommendation.InsightReference} InsightReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InsightReference.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Recommendation.InsightReference(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.insight = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an InsightReference message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.Recommendation.InsightReference} InsightReference + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + InsightReference.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an InsightReference message. + * @function verify + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + InsightReference.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.insight != null && message.hasOwnProperty("insight")) + if (!$util.isString(message.insight)) + return "insight: string expected"; + return null; + }; + + /** + * Creates an InsightReference message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.Recommendation.InsightReference} InsightReference + */ + InsightReference.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.Recommendation.InsightReference) + return object; + var message = new $root.google.cloud.recommender.v1.Recommendation.InsightReference(); + if (object.insight != null) + message.insight = String(object.insight); + return message; + }; + + /** + * Creates a plain object from an InsightReference message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @static + * @param {google.cloud.recommender.v1.Recommendation.InsightReference} message InsightReference + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + InsightReference.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.insight = ""; + if (message.insight != null && message.hasOwnProperty("insight")) + object.insight = message.insight; + return object; + }; + + /** + * Converts this InsightReference to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.Recommendation.InsightReference + * @instance + * @returns {Object.} JSON object + */ + InsightReference.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return InsightReference; + })(); + + return Recommendation; })(); - v1.Operation = (function() { + v1.RecommendationContent = (function() { /** - * Properties of an Operation. + * Properties of a RecommendationContent. * @memberof google.cloud.recommender.v1 - * @interface IOperation - * @property {string|null} [action] Operation action - * @property {string|null} [resourceType] Operation resourceType - * @property {string|null} [resource] Operation resource - * @property {string|null} [path] Operation path - * @property {string|null} [sourceResource] Operation sourceResource - * @property {string|null} [sourcePath] Operation sourcePath - * @property {google.protobuf.IValue|null} [value] Operation value - * @property {google.cloud.recommender.v1.IValueMatcher|null} [valueMatcher] Operation valueMatcher - * @property {Object.|null} [pathFilters] Operation pathFilters - * @property {Object.|null} [pathValueMatchers] Operation pathValueMatchers + * @interface IRecommendationContent + * @property {Array.|null} [operationGroups] RecommendationContent operationGroups */ /** - * Constructs a new Operation. + * Constructs a new RecommendationContent. * @memberof google.cloud.recommender.v1 - * @classdesc Represents an Operation. - * @implements IOperation + * @classdesc Represents a RecommendationContent. + * @implements IRecommendationContent * @constructor - * @param {google.cloud.recommender.v1.IOperation=} [properties] Properties to set + * @param {google.cloud.recommender.v1.IRecommendationContent=} [properties] Properties to set */ - function Operation(properties) { - this.pathFilters = {}; - this.pathValueMatchers = {}; + function RecommendationContent(properties) { + this.operationGroups = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -924,222 +1703,78 @@ } /** - * Operation action. - * @member {string} action - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.action = ""; - - /** - * Operation resourceType. - * @member {string} resourceType - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.resourceType = ""; - - /** - * Operation resource. - * @member {string} resource - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.resource = ""; - - /** - * Operation path. - * @member {string} path - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.path = ""; - - /** - * Operation sourceResource. - * @member {string} sourceResource - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.sourceResource = ""; - - /** - * Operation sourcePath. - * @member {string} sourcePath - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.sourcePath = ""; - - /** - * Operation value. - * @member {google.protobuf.IValue|null|undefined} value - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.value = null; - - /** - * Operation valueMatcher. - * @member {google.cloud.recommender.v1.IValueMatcher|null|undefined} valueMatcher - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.valueMatcher = null; - - /** - * Operation pathFilters. - * @member {Object.} pathFilters - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.pathFilters = $util.emptyObject; - - /** - * Operation pathValueMatchers. - * @member {Object.} pathValueMatchers - * @memberof google.cloud.recommender.v1.Operation - * @instance - */ - Operation.prototype.pathValueMatchers = $util.emptyObject; - - // OneOf field names bound to virtual getters and setters - var $oneOfFields; - - /** - * Operation pathValue. - * @member {"value"|"valueMatcher"|undefined} pathValue - * @memberof google.cloud.recommender.v1.Operation + * RecommendationContent operationGroups. + * @member {Array.} operationGroups + * @memberof google.cloud.recommender.v1.RecommendationContent * @instance */ - Object.defineProperty(Operation.prototype, "pathValue", { - get: $util.oneOfGetter($oneOfFields = ["value", "valueMatcher"]), - set: $util.oneOfSetter($oneOfFields) - }); + RecommendationContent.prototype.operationGroups = $util.emptyArray; /** - * Creates a new Operation instance using the specified properties. + * Creates a new RecommendationContent instance using the specified properties. * @function create - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @static - * @param {google.cloud.recommender.v1.IOperation=} [properties] Properties to set - * @returns {google.cloud.recommender.v1.Operation} Operation instance + * @param {google.cloud.recommender.v1.IRecommendationContent=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.RecommendationContent} RecommendationContent instance */ - Operation.create = function create(properties) { - return new Operation(properties); + RecommendationContent.create = function create(properties) { + return new RecommendationContent(properties); }; /** - * Encodes the specified Operation message. Does not implicitly {@link google.cloud.recommender.v1.Operation.verify|verify} messages. + * Encodes the specified RecommendationContent message. Does not implicitly {@link google.cloud.recommender.v1.RecommendationContent.verify|verify} messages. * @function encode - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @static - * @param {google.cloud.recommender.v1.IOperation} message Operation message or plain object to encode + * @param {google.cloud.recommender.v1.IRecommendationContent} message RecommendationContent message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Operation.encode = function encode(message, writer) { + RecommendationContent.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.action != null && Object.hasOwnProperty.call(message, "action")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.action); - if (message.resourceType != null && Object.hasOwnProperty.call(message, "resourceType")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.resourceType); - if (message.resource != null && Object.hasOwnProperty.call(message, "resource")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.resource); - if (message.path != null && Object.hasOwnProperty.call(message, "path")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.path); - if (message.sourceResource != null && Object.hasOwnProperty.call(message, "sourceResource")) - writer.uint32(/* id 5, wireType 2 =*/42).string(message.sourceResource); - if (message.sourcePath != null && Object.hasOwnProperty.call(message, "sourcePath")) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.sourcePath); - if (message.value != null && Object.hasOwnProperty.call(message, "value")) - $root.google.protobuf.Value.encode(message.value, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); - if (message.pathFilters != null && Object.hasOwnProperty.call(message, "pathFilters")) - for (var keys = Object.keys(message.pathFilters), i = 0; i < keys.length; ++i) { - writer.uint32(/* id 8, wireType 2 =*/66).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); - $root.google.protobuf.Value.encode(message.pathFilters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); - } - if (message.valueMatcher != null && Object.hasOwnProperty.call(message, "valueMatcher")) - $root.google.cloud.recommender.v1.ValueMatcher.encode(message.valueMatcher, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim(); - if (message.pathValueMatchers != null && Object.hasOwnProperty.call(message, "pathValueMatchers")) - for (var keys = Object.keys(message.pathValueMatchers), i = 0; i < keys.length; ++i) { - writer.uint32(/* id 11, wireType 2 =*/90).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); - $root.google.cloud.recommender.v1.ValueMatcher.encode(message.pathValueMatchers[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); - } + if (message.operationGroups != null && message.operationGroups.length) + for (var i = 0; i < message.operationGroups.length; ++i) + $root.google.cloud.recommender.v1.OperationGroup.encode(message.operationGroups[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); return writer; }; /** - * Encodes the specified Operation message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Operation.verify|verify} messages. + * Encodes the specified RecommendationContent message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.RecommendationContent.verify|verify} messages. * @function encodeDelimited - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @static - * @param {google.cloud.recommender.v1.IOperation} message Operation message or plain object to encode + * @param {google.cloud.recommender.v1.IRecommendationContent} message RecommendationContent message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Operation.encodeDelimited = function encodeDelimited(message, writer) { + RecommendationContent.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an Operation message from the specified reader or buffer. + * Decodes a RecommendationContent message from the specified reader or buffer. * @function decode - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.recommender.v1.Operation} Operation + * @returns {google.cloud.recommender.v1.RecommendationContent} RecommendationContent * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Operation.decode = function decode(reader, length) { + RecommendationContent.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Operation(), key; + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.RecommendationContent(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { - case 1: - message.action = reader.string(); - break; case 2: - message.resourceType = reader.string(); - break; - case 3: - message.resource = reader.string(); - break; - case 4: - message.path = reader.string(); - break; - case 5: - message.sourceResource = reader.string(); - break; - case 6: - message.sourcePath = reader.string(); - break; - case 7: - message.value = $root.google.protobuf.Value.decode(reader, reader.uint32()); - break; - case 10: - message.valueMatcher = $root.google.cloud.recommender.v1.ValueMatcher.decode(reader, reader.uint32()); - break; - case 8: - reader.skip().pos++; - if (message.pathFilters === $util.emptyObject) - message.pathFilters = {}; - key = reader.string(); - reader.pos++; - message.pathFilters[key] = $root.google.protobuf.Value.decode(reader, reader.uint32()); - break; - case 11: - reader.skip().pos++; - if (message.pathValueMatchers === $util.emptyObject) - message.pathValueMatchers = {}; - key = reader.string(); - reader.pos++; - message.pathValueMatchers[key] = $root.google.cloud.recommender.v1.ValueMatcher.decode(reader, reader.uint32()); + if (!(message.operationGroups && message.operationGroups.length)) + message.operationGroups = []; + message.operationGroups.push($root.google.cloud.recommender.v1.OperationGroup.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -1150,242 +1785,125 @@ }; /** - * Decodes an Operation message from the specified reader or buffer, length delimited. + * Decodes a RecommendationContent message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.recommender.v1.Operation} Operation + * @returns {google.cloud.recommender.v1.RecommendationContent} RecommendationContent * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Operation.decodeDelimited = function decodeDelimited(reader) { + RecommendationContent.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an Operation message. + * Verifies a RecommendationContent message. * @function verify - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - Operation.verify = function verify(message) { + RecommendationContent.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - var properties = {}; - if (message.action != null && message.hasOwnProperty("action")) - if (!$util.isString(message.action)) - return "action: string expected"; - if (message.resourceType != null && message.hasOwnProperty("resourceType")) - if (!$util.isString(message.resourceType)) - return "resourceType: string expected"; - if (message.resource != null && message.hasOwnProperty("resource")) - if (!$util.isString(message.resource)) - return "resource: string expected"; - if (message.path != null && message.hasOwnProperty("path")) - if (!$util.isString(message.path)) - return "path: string expected"; - if (message.sourceResource != null && message.hasOwnProperty("sourceResource")) - if (!$util.isString(message.sourceResource)) - return "sourceResource: string expected"; - if (message.sourcePath != null && message.hasOwnProperty("sourcePath")) - if (!$util.isString(message.sourcePath)) - return "sourcePath: string expected"; - if (message.value != null && message.hasOwnProperty("value")) { - properties.pathValue = 1; - { - var error = $root.google.protobuf.Value.verify(message.value); - if (error) - return "value." + error; - } - } - if (message.valueMatcher != null && message.hasOwnProperty("valueMatcher")) { - if (properties.pathValue === 1) - return "pathValue: multiple values"; - properties.pathValue = 1; - { - var error = $root.google.cloud.recommender.v1.ValueMatcher.verify(message.valueMatcher); - if (error) - return "valueMatcher." + error; - } - } - if (message.pathFilters != null && message.hasOwnProperty("pathFilters")) { - if (!$util.isObject(message.pathFilters)) - return "pathFilters: object expected"; - var key = Object.keys(message.pathFilters); - for (var i = 0; i < key.length; ++i) { - var error = $root.google.protobuf.Value.verify(message.pathFilters[key[i]]); - if (error) - return "pathFilters." + error; - } - } - if (message.pathValueMatchers != null && message.hasOwnProperty("pathValueMatchers")) { - if (!$util.isObject(message.pathValueMatchers)) - return "pathValueMatchers: object expected"; - var key = Object.keys(message.pathValueMatchers); - for (var i = 0; i < key.length; ++i) { - var error = $root.google.cloud.recommender.v1.ValueMatcher.verify(message.pathValueMatchers[key[i]]); + if (message.operationGroups != null && message.hasOwnProperty("operationGroups")) { + if (!Array.isArray(message.operationGroups)) + return "operationGroups: array expected"; + for (var i = 0; i < message.operationGroups.length; ++i) { + var error = $root.google.cloud.recommender.v1.OperationGroup.verify(message.operationGroups[i]); if (error) - return "pathValueMatchers." + error; + return "operationGroups." + error; } } return null; }; /** - * Creates an Operation message from a plain object. Also converts values to their respective internal types. + * Creates a RecommendationContent message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @static * @param {Object.} object Plain object - * @returns {google.cloud.recommender.v1.Operation} Operation + * @returns {google.cloud.recommender.v1.RecommendationContent} RecommendationContent */ - Operation.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.recommender.v1.Operation) + RecommendationContent.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.RecommendationContent) return object; - var message = new $root.google.cloud.recommender.v1.Operation(); - if (object.action != null) - message.action = String(object.action); - if (object.resourceType != null) - message.resourceType = String(object.resourceType); - if (object.resource != null) - message.resource = String(object.resource); - if (object.path != null) - message.path = String(object.path); - if (object.sourceResource != null) - message.sourceResource = String(object.sourceResource); - if (object.sourcePath != null) - message.sourcePath = String(object.sourcePath); - if (object.value != null) { - if (typeof object.value !== "object") - throw TypeError(".google.cloud.recommender.v1.Operation.value: object expected"); - message.value = $root.google.protobuf.Value.fromObject(object.value); - } - if (object.valueMatcher != null) { - if (typeof object.valueMatcher !== "object") - throw TypeError(".google.cloud.recommender.v1.Operation.valueMatcher: object expected"); - message.valueMatcher = $root.google.cloud.recommender.v1.ValueMatcher.fromObject(object.valueMatcher); - } - if (object.pathFilters) { - if (typeof object.pathFilters !== "object") - throw TypeError(".google.cloud.recommender.v1.Operation.pathFilters: object expected"); - message.pathFilters = {}; - for (var keys = Object.keys(object.pathFilters), i = 0; i < keys.length; ++i) { - if (typeof object.pathFilters[keys[i]] !== "object") - throw TypeError(".google.cloud.recommender.v1.Operation.pathFilters: object expected"); - message.pathFilters[keys[i]] = $root.google.protobuf.Value.fromObject(object.pathFilters[keys[i]]); - } - } - if (object.pathValueMatchers) { - if (typeof object.pathValueMatchers !== "object") - throw TypeError(".google.cloud.recommender.v1.Operation.pathValueMatchers: object expected"); - message.pathValueMatchers = {}; - for (var keys = Object.keys(object.pathValueMatchers), i = 0; i < keys.length; ++i) { - if (typeof object.pathValueMatchers[keys[i]] !== "object") - throw TypeError(".google.cloud.recommender.v1.Operation.pathValueMatchers: object expected"); - message.pathValueMatchers[keys[i]] = $root.google.cloud.recommender.v1.ValueMatcher.fromObject(object.pathValueMatchers[keys[i]]); + var message = new $root.google.cloud.recommender.v1.RecommendationContent(); + if (object.operationGroups) { + if (!Array.isArray(object.operationGroups)) + throw TypeError(".google.cloud.recommender.v1.RecommendationContent.operationGroups: array expected"); + message.operationGroups = []; + for (var i = 0; i < object.operationGroups.length; ++i) { + if (typeof object.operationGroups[i] !== "object") + throw TypeError(".google.cloud.recommender.v1.RecommendationContent.operationGroups: object expected"); + message.operationGroups[i] = $root.google.cloud.recommender.v1.OperationGroup.fromObject(object.operationGroups[i]); } } return message; }; /** - * Creates a plain object from an Operation message. Also converts values to other types if specified. + * Creates a plain object from a RecommendationContent message. Also converts values to other types if specified. * @function toObject - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @static - * @param {google.cloud.recommender.v1.Operation} message Operation + * @param {google.cloud.recommender.v1.RecommendationContent} message RecommendationContent * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - Operation.toObject = function toObject(message, options) { + RecommendationContent.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.objects || options.defaults) { - object.pathFilters = {}; - object.pathValueMatchers = {}; - } - if (options.defaults) { - object.action = ""; - object.resourceType = ""; - object.resource = ""; - object.path = ""; - object.sourceResource = ""; - object.sourcePath = ""; - } - if (message.action != null && message.hasOwnProperty("action")) - object.action = message.action; - if (message.resourceType != null && message.hasOwnProperty("resourceType")) - object.resourceType = message.resourceType; - if (message.resource != null && message.hasOwnProperty("resource")) - object.resource = message.resource; - if (message.path != null && message.hasOwnProperty("path")) - object.path = message.path; - if (message.sourceResource != null && message.hasOwnProperty("sourceResource")) - object.sourceResource = message.sourceResource; - if (message.sourcePath != null && message.hasOwnProperty("sourcePath")) - object.sourcePath = message.sourcePath; - if (message.value != null && message.hasOwnProperty("value")) { - object.value = $root.google.protobuf.Value.toObject(message.value, options); - if (options.oneofs) - object.pathValue = "value"; - } - var keys2; - if (message.pathFilters && (keys2 = Object.keys(message.pathFilters)).length) { - object.pathFilters = {}; - for (var j = 0; j < keys2.length; ++j) - object.pathFilters[keys2[j]] = $root.google.protobuf.Value.toObject(message.pathFilters[keys2[j]], options); - } - if (message.valueMatcher != null && message.hasOwnProperty("valueMatcher")) { - object.valueMatcher = $root.google.cloud.recommender.v1.ValueMatcher.toObject(message.valueMatcher, options); - if (options.oneofs) - object.pathValue = "valueMatcher"; - } - if (message.pathValueMatchers && (keys2 = Object.keys(message.pathValueMatchers)).length) { - object.pathValueMatchers = {}; - for (var j = 0; j < keys2.length; ++j) - object.pathValueMatchers[keys2[j]] = $root.google.cloud.recommender.v1.ValueMatcher.toObject(message.pathValueMatchers[keys2[j]], options); + if (options.arrays || options.defaults) + object.operationGroups = []; + if (message.operationGroups && message.operationGroups.length) { + object.operationGroups = []; + for (var j = 0; j < message.operationGroups.length; ++j) + object.operationGroups[j] = $root.google.cloud.recommender.v1.OperationGroup.toObject(message.operationGroups[j], options); } return object; }; /** - * Converts this Operation to JSON. + * Converts this RecommendationContent to JSON. * @function toJSON - * @memberof google.cloud.recommender.v1.Operation + * @memberof google.cloud.recommender.v1.RecommendationContent * @instance * @returns {Object.} JSON object */ - Operation.prototype.toJSON = function toJSON() { + RecommendationContent.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return Operation; + return RecommendationContent; })(); - v1.ValueMatcher = (function() { + v1.OperationGroup = (function() { /** - * Properties of a ValueMatcher. + * Properties of an OperationGroup. * @memberof google.cloud.recommender.v1 - * @interface IValueMatcher - * @property {string|null} [matchesPattern] ValueMatcher matchesPattern + * @interface IOperationGroup + * @property {Array.|null} [operations] OperationGroup operations */ /** - * Constructs a new ValueMatcher. + * Constructs a new OperationGroup. * @memberof google.cloud.recommender.v1 - * @classdesc Represents a ValueMatcher. - * @implements IValueMatcher + * @classdesc Represents an OperationGroup. + * @implements IOperationGroup * @constructor - * @param {google.cloud.recommender.v1.IValueMatcher=} [properties] Properties to set + * @param {google.cloud.recommender.v1.IOperationGroup=} [properties] Properties to set */ - function ValueMatcher(properties) { + function OperationGroup(properties) { + this.operations = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -1393,89 +1911,78 @@ } /** - * ValueMatcher matchesPattern. - * @member {string} matchesPattern - * @memberof google.cloud.recommender.v1.ValueMatcher - * @instance - */ - ValueMatcher.prototype.matchesPattern = ""; - - // OneOf field names bound to virtual getters and setters - var $oneOfFields; - - /** - * ValueMatcher matchVariant. - * @member {"matchesPattern"|undefined} matchVariant - * @memberof google.cloud.recommender.v1.ValueMatcher + * OperationGroup operations. + * @member {Array.} operations + * @memberof google.cloud.recommender.v1.OperationGroup * @instance */ - Object.defineProperty(ValueMatcher.prototype, "matchVariant", { - get: $util.oneOfGetter($oneOfFields = ["matchesPattern"]), - set: $util.oneOfSetter($oneOfFields) - }); + OperationGroup.prototype.operations = $util.emptyArray; /** - * Creates a new ValueMatcher instance using the specified properties. + * Creates a new OperationGroup instance using the specified properties. * @function create - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @static - * @param {google.cloud.recommender.v1.IValueMatcher=} [properties] Properties to set - * @returns {google.cloud.recommender.v1.ValueMatcher} ValueMatcher instance + * @param {google.cloud.recommender.v1.IOperationGroup=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.OperationGroup} OperationGroup instance */ - ValueMatcher.create = function create(properties) { - return new ValueMatcher(properties); + OperationGroup.create = function create(properties) { + return new OperationGroup(properties); }; /** - * Encodes the specified ValueMatcher message. Does not implicitly {@link google.cloud.recommender.v1.ValueMatcher.verify|verify} messages. + * Encodes the specified OperationGroup message. Does not implicitly {@link google.cloud.recommender.v1.OperationGroup.verify|verify} messages. * @function encode - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @static - * @param {google.cloud.recommender.v1.IValueMatcher} message ValueMatcher message or plain object to encode + * @param {google.cloud.recommender.v1.IOperationGroup} message OperationGroup message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ValueMatcher.encode = function encode(message, writer) { + OperationGroup.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.matchesPattern != null && Object.hasOwnProperty.call(message, "matchesPattern")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.matchesPattern); + if (message.operations != null && message.operations.length) + for (var i = 0; i < message.operations.length; ++i) + $root.google.cloud.recommender.v1.Operation.encode(message.operations[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); return writer; }; /** - * Encodes the specified ValueMatcher message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.ValueMatcher.verify|verify} messages. + * Encodes the specified OperationGroup message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.OperationGroup.verify|verify} messages. * @function encodeDelimited - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @static - * @param {google.cloud.recommender.v1.IValueMatcher} message ValueMatcher message or plain object to encode + * @param {google.cloud.recommender.v1.IOperationGroup} message OperationGroup message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - ValueMatcher.encodeDelimited = function encodeDelimited(message, writer) { + OperationGroup.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a ValueMatcher message from the specified reader or buffer. + * Decodes an OperationGroup message from the specified reader or buffer. * @function decode - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.recommender.v1.ValueMatcher} ValueMatcher + * @returns {google.cloud.recommender.v1.OperationGroup} OperationGroup * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ValueMatcher.decode = function decode(reader, length) { + OperationGroup.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.ValueMatcher(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.OperationGroup(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.matchesPattern = reader.string(); + if (!(message.operations && message.operations.length)) + message.operations = []; + message.operations.push($root.google.cloud.recommender.v1.Operation.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); @@ -1486,112 +1993,135 @@ }; /** - * Decodes a ValueMatcher message from the specified reader or buffer, length delimited. + * Decodes an OperationGroup message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.recommender.v1.ValueMatcher} ValueMatcher + * @returns {google.cloud.recommender.v1.OperationGroup} OperationGroup * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - ValueMatcher.decodeDelimited = function decodeDelimited(reader) { + OperationGroup.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a ValueMatcher message. + * Verifies an OperationGroup message. * @function verify - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - ValueMatcher.verify = function verify(message) { + OperationGroup.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - var properties = {}; - if (message.matchesPattern != null && message.hasOwnProperty("matchesPattern")) { - properties.matchVariant = 1; - if (!$util.isString(message.matchesPattern)) - return "matchesPattern: string expected"; + if (message.operations != null && message.hasOwnProperty("operations")) { + if (!Array.isArray(message.operations)) + return "operations: array expected"; + for (var i = 0; i < message.operations.length; ++i) { + var error = $root.google.cloud.recommender.v1.Operation.verify(message.operations[i]); + if (error) + return "operations." + error; + } } return null; }; /** - * Creates a ValueMatcher message from a plain object. Also converts values to their respective internal types. + * Creates an OperationGroup message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @static * @param {Object.} object Plain object - * @returns {google.cloud.recommender.v1.ValueMatcher} ValueMatcher + * @returns {google.cloud.recommender.v1.OperationGroup} OperationGroup */ - ValueMatcher.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.recommender.v1.ValueMatcher) + OperationGroup.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.OperationGroup) return object; - var message = new $root.google.cloud.recommender.v1.ValueMatcher(); - if (object.matchesPattern != null) - message.matchesPattern = String(object.matchesPattern); + var message = new $root.google.cloud.recommender.v1.OperationGroup(); + if (object.operations) { + if (!Array.isArray(object.operations)) + throw TypeError(".google.cloud.recommender.v1.OperationGroup.operations: array expected"); + message.operations = []; + for (var i = 0; i < object.operations.length; ++i) { + if (typeof object.operations[i] !== "object") + throw TypeError(".google.cloud.recommender.v1.OperationGroup.operations: object expected"); + message.operations[i] = $root.google.cloud.recommender.v1.Operation.fromObject(object.operations[i]); + } + } return message; }; /** - * Creates a plain object from a ValueMatcher message. Also converts values to other types if specified. + * Creates a plain object from an OperationGroup message. Also converts values to other types if specified. * @function toObject - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @static - * @param {google.cloud.recommender.v1.ValueMatcher} message ValueMatcher + * @param {google.cloud.recommender.v1.OperationGroup} message OperationGroup * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - ValueMatcher.toObject = function toObject(message, options) { + OperationGroup.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (message.matchesPattern != null && message.hasOwnProperty("matchesPattern")) { - object.matchesPattern = message.matchesPattern; - if (options.oneofs) - object.matchVariant = "matchesPattern"; + if (options.arrays || options.defaults) + object.operations = []; + if (message.operations && message.operations.length) { + object.operations = []; + for (var j = 0; j < message.operations.length; ++j) + object.operations[j] = $root.google.cloud.recommender.v1.Operation.toObject(message.operations[j], options); } return object; }; /** - * Converts this ValueMatcher to JSON. + * Converts this OperationGroup to JSON. * @function toJSON - * @memberof google.cloud.recommender.v1.ValueMatcher + * @memberof google.cloud.recommender.v1.OperationGroup * @instance * @returns {Object.} JSON object */ - ValueMatcher.prototype.toJSON = function toJSON() { + OperationGroup.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; - return ValueMatcher; + return OperationGroup; })(); - v1.CostProjection = (function() { + v1.Operation = (function() { /** - * Properties of a CostProjection. + * Properties of an Operation. * @memberof google.cloud.recommender.v1 - * @interface ICostProjection - * @property {google.type.IMoney|null} [cost] CostProjection cost - * @property {google.protobuf.IDuration|null} [duration] CostProjection duration + * @interface IOperation + * @property {string|null} [action] Operation action + * @property {string|null} [resourceType] Operation resourceType + * @property {string|null} [resource] Operation resource + * @property {string|null} [path] Operation path + * @property {string|null} [sourceResource] Operation sourceResource + * @property {string|null} [sourcePath] Operation sourcePath + * @property {google.protobuf.IValue|null} [value] Operation value + * @property {google.cloud.recommender.v1.IValueMatcher|null} [valueMatcher] Operation valueMatcher + * @property {Object.|null} [pathFilters] Operation pathFilters + * @property {Object.|null} [pathValueMatchers] Operation pathValueMatchers */ /** - * Constructs a new CostProjection. + * Constructs a new Operation. * @memberof google.cloud.recommender.v1 - * @classdesc Represents a CostProjection. - * @implements ICostProjection + * @classdesc Represents an Operation. + * @implements IOperation * @constructor - * @param {google.cloud.recommender.v1.ICostProjection=} [properties] Properties to set + * @param {google.cloud.recommender.v1.IOperation=} [properties] Properties to set */ - function CostProjection(properties) { + function Operation(properties) { + this.pathFilters = {}; + this.pathValueMatchers = {}; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -1599,322 +2129,222 @@ } /** - * CostProjection cost. - * @member {google.type.IMoney|null|undefined} cost - * @memberof google.cloud.recommender.v1.CostProjection + * Operation action. + * @member {string} action + * @memberof google.cloud.recommender.v1.Operation * @instance */ - CostProjection.prototype.cost = null; + Operation.prototype.action = ""; /** - * CostProjection duration. - * @member {google.protobuf.IDuration|null|undefined} duration - * @memberof google.cloud.recommender.v1.CostProjection + * Operation resourceType. + * @member {string} resourceType + * @memberof google.cloud.recommender.v1.Operation * @instance */ - CostProjection.prototype.duration = null; + Operation.prototype.resourceType = ""; /** - * Creates a new CostProjection instance using the specified properties. - * @function create - * @memberof google.cloud.recommender.v1.CostProjection - * @static - * @param {google.cloud.recommender.v1.ICostProjection=} [properties] Properties to set - * @returns {google.cloud.recommender.v1.CostProjection} CostProjection instance + * Operation resource. + * @member {string} resource + * @memberof google.cloud.recommender.v1.Operation + * @instance */ - CostProjection.create = function create(properties) { - return new CostProjection(properties); - }; + Operation.prototype.resource = ""; /** - * Encodes the specified CostProjection message. Does not implicitly {@link google.cloud.recommender.v1.CostProjection.verify|verify} messages. - * @function encode - * @memberof google.cloud.recommender.v1.CostProjection - * @static - * @param {google.cloud.recommender.v1.ICostProjection} message CostProjection message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer + * Operation path. + * @member {string} path + * @memberof google.cloud.recommender.v1.Operation + * @instance */ - CostProjection.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.cost != null && Object.hasOwnProperty.call(message, "cost")) - $root.google.type.Money.encode(message.cost, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.duration != null && Object.hasOwnProperty.call(message, "duration")) - $root.google.protobuf.Duration.encode(message.duration, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; + Operation.prototype.path = ""; /** - * Encodes the specified CostProjection message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.CostProjection.verify|verify} messages. - * @function encodeDelimited - * @memberof google.cloud.recommender.v1.CostProjection - * @static - * @param {google.cloud.recommender.v1.ICostProjection} message CostProjection message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer + * Operation sourceResource. + * @member {string} sourceResource + * @memberof google.cloud.recommender.v1.Operation + * @instance */ - CostProjection.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CostProjection message from the specified reader or buffer. - * @function decode - * @memberof google.cloud.recommender.v1.CostProjection - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.recommender.v1.CostProjection} CostProjection - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CostProjection.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.CostProjection(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.cost = $root.google.type.Money.decode(reader, reader.uint32()); - break; - case 2: - message.duration = $root.google.protobuf.Duration.decode(reader, reader.uint32()); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CostProjection message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof google.cloud.recommender.v1.CostProjection - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.recommender.v1.CostProjection} CostProjection - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CostProjection.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CostProjection message. - * @function verify - * @memberof google.cloud.recommender.v1.CostProjection - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CostProjection.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.cost != null && message.hasOwnProperty("cost")) { - var error = $root.google.type.Money.verify(message.cost); - if (error) - return "cost." + error; - } - if (message.duration != null && message.hasOwnProperty("duration")) { - var error = $root.google.protobuf.Duration.verify(message.duration); - if (error) - return "duration." + error; - } - return null; - }; - - /** - * Creates a CostProjection message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof google.cloud.recommender.v1.CostProjection - * @static - * @param {Object.} object Plain object - * @returns {google.cloud.recommender.v1.CostProjection} CostProjection - */ - CostProjection.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.recommender.v1.CostProjection) - return object; - var message = new $root.google.cloud.recommender.v1.CostProjection(); - if (object.cost != null) { - if (typeof object.cost !== "object") - throw TypeError(".google.cloud.recommender.v1.CostProjection.cost: object expected"); - message.cost = $root.google.type.Money.fromObject(object.cost); - } - if (object.duration != null) { - if (typeof object.duration !== "object") - throw TypeError(".google.cloud.recommender.v1.CostProjection.duration: object expected"); - message.duration = $root.google.protobuf.Duration.fromObject(object.duration); - } - return message; - }; - - /** - * Creates a plain object from a CostProjection message. Also converts values to other types if specified. - * @function toObject - * @memberof google.cloud.recommender.v1.CostProjection - * @static - * @param {google.cloud.recommender.v1.CostProjection} message CostProjection - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CostProjection.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.cost = null; - object.duration = null; - } - if (message.cost != null && message.hasOwnProperty("cost")) - object.cost = $root.google.type.Money.toObject(message.cost, options); - if (message.duration != null && message.hasOwnProperty("duration")) - object.duration = $root.google.protobuf.Duration.toObject(message.duration, options); - return object; - }; + Operation.prototype.sourceResource = ""; /** - * Converts this CostProjection to JSON. - * @function toJSON - * @memberof google.cloud.recommender.v1.CostProjection + * Operation sourcePath. + * @member {string} sourcePath + * @memberof google.cloud.recommender.v1.Operation * @instance - * @returns {Object.} JSON object */ - CostProjection.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - return CostProjection; - })(); - - v1.Impact = (function() { + Operation.prototype.sourcePath = ""; /** - * Properties of an Impact. - * @memberof google.cloud.recommender.v1 - * @interface IImpact - * @property {google.cloud.recommender.v1.Impact.Category|null} [category] Impact category - * @property {google.cloud.recommender.v1.ICostProjection|null} [costProjection] Impact costProjection + * Operation value. + * @member {google.protobuf.IValue|null|undefined} value + * @memberof google.cloud.recommender.v1.Operation + * @instance */ + Operation.prototype.value = null; /** - * Constructs a new Impact. - * @memberof google.cloud.recommender.v1 - * @classdesc Represents an Impact. - * @implements IImpact - * @constructor - * @param {google.cloud.recommender.v1.IImpact=} [properties] Properties to set + * Operation valueMatcher. + * @member {google.cloud.recommender.v1.IValueMatcher|null|undefined} valueMatcher + * @memberof google.cloud.recommender.v1.Operation + * @instance */ - function Impact(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } + Operation.prototype.valueMatcher = null; /** - * Impact category. - * @member {google.cloud.recommender.v1.Impact.Category} category - * @memberof google.cloud.recommender.v1.Impact + * Operation pathFilters. + * @member {Object.} pathFilters + * @memberof google.cloud.recommender.v1.Operation * @instance */ - Impact.prototype.category = 0; + Operation.prototype.pathFilters = $util.emptyObject; /** - * Impact costProjection. - * @member {google.cloud.recommender.v1.ICostProjection|null|undefined} costProjection - * @memberof google.cloud.recommender.v1.Impact + * Operation pathValueMatchers. + * @member {Object.} pathValueMatchers + * @memberof google.cloud.recommender.v1.Operation * @instance */ - Impact.prototype.costProjection = null; + Operation.prototype.pathValueMatchers = $util.emptyObject; // OneOf field names bound to virtual getters and setters var $oneOfFields; /** - * Impact projection. - * @member {"costProjection"|undefined} projection - * @memberof google.cloud.recommender.v1.Impact + * Operation pathValue. + * @member {"value"|"valueMatcher"|undefined} pathValue + * @memberof google.cloud.recommender.v1.Operation * @instance */ - Object.defineProperty(Impact.prototype, "projection", { - get: $util.oneOfGetter($oneOfFields = ["costProjection"]), + Object.defineProperty(Operation.prototype, "pathValue", { + get: $util.oneOfGetter($oneOfFields = ["value", "valueMatcher"]), set: $util.oneOfSetter($oneOfFields) }); /** - * Creates a new Impact instance using the specified properties. + * Creates a new Operation instance using the specified properties. * @function create - * @memberof google.cloud.recommender.v1.Impact + * @memberof google.cloud.recommender.v1.Operation * @static - * @param {google.cloud.recommender.v1.IImpact=} [properties] Properties to set - * @returns {google.cloud.recommender.v1.Impact} Impact instance + * @param {google.cloud.recommender.v1.IOperation=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.Operation} Operation instance */ - Impact.create = function create(properties) { - return new Impact(properties); + Operation.create = function create(properties) { + return new Operation(properties); }; /** - * Encodes the specified Impact message. Does not implicitly {@link google.cloud.recommender.v1.Impact.verify|verify} messages. + * Encodes the specified Operation message. Does not implicitly {@link google.cloud.recommender.v1.Operation.verify|verify} messages. * @function encode - * @memberof google.cloud.recommender.v1.Impact + * @memberof google.cloud.recommender.v1.Operation * @static - * @param {google.cloud.recommender.v1.IImpact} message Impact message or plain object to encode + * @param {google.cloud.recommender.v1.IOperation} message Operation message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Impact.encode = function encode(message, writer) { + Operation.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.category != null && Object.hasOwnProperty.call(message, "category")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.category); - 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.action != null && Object.hasOwnProperty.call(message, "action")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.action); + if (message.resourceType != null && Object.hasOwnProperty.call(message, "resourceType")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.resourceType); + if (message.resource != null && Object.hasOwnProperty.call(message, "resource")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.resource); + if (message.path != null && Object.hasOwnProperty.call(message, "path")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.path); + if (message.sourceResource != null && Object.hasOwnProperty.call(message, "sourceResource")) + writer.uint32(/* id 5, wireType 2 =*/42).string(message.sourceResource); + if (message.sourcePath != null && Object.hasOwnProperty.call(message, "sourcePath")) + writer.uint32(/* id 6, wireType 2 =*/50).string(message.sourcePath); + if (message.value != null && Object.hasOwnProperty.call(message, "value")) + $root.google.protobuf.Value.encode(message.value, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.pathFilters != null && Object.hasOwnProperty.call(message, "pathFilters")) + for (var keys = Object.keys(message.pathFilters), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 8, wireType 2 =*/66).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.google.protobuf.Value.encode(message.pathFilters[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } + if (message.valueMatcher != null && Object.hasOwnProperty.call(message, "valueMatcher")) + $root.google.cloud.recommender.v1.ValueMatcher.encode(message.valueMatcher, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim(); + if (message.pathValueMatchers != null && Object.hasOwnProperty.call(message, "pathValueMatchers")) + for (var keys = Object.keys(message.pathValueMatchers), i = 0; i < keys.length; ++i) { + writer.uint32(/* id 11, wireType 2 =*/90).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]); + $root.google.cloud.recommender.v1.ValueMatcher.encode(message.pathValueMatchers[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim(); + } return writer; }; /** - * Encodes the specified Impact message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Impact.verify|verify} messages. + * Encodes the specified Operation message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Operation.verify|verify} messages. * @function encodeDelimited - * @memberof google.cloud.recommender.v1.Impact + * @memberof google.cloud.recommender.v1.Operation * @static - * @param {google.cloud.recommender.v1.IImpact} message Impact message or plain object to encode + * @param {google.cloud.recommender.v1.IOperation} message Operation message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - Impact.encodeDelimited = function encodeDelimited(message, writer) { + Operation.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes an Impact message from the specified reader or buffer. + * Decodes an Operation message from the specified reader or buffer. * @function decode - * @memberof google.cloud.recommender.v1.Impact + * @memberof google.cloud.recommender.v1.Operation * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.recommender.v1.Impact} Impact + * @returns {google.cloud.recommender.v1.Operation} Operation * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Impact.decode = function decode(reader, length) { + Operation.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Impact(); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Operation(), key; while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.category = reader.int32(); + message.action = reader.string(); break; - case 100: - message.costProjection = $root.google.cloud.recommender.v1.CostProjection.decode(reader, reader.uint32()); + case 2: + message.resourceType = reader.string(); + break; + case 3: + message.resource = reader.string(); + break; + case 4: + message.path = reader.string(); + break; + case 5: + message.sourceResource = reader.string(); + break; + case 6: + message.sourcePath = reader.string(); + break; + case 7: + message.value = $root.google.protobuf.Value.decode(reader, reader.uint32()); + break; + case 10: + message.valueMatcher = $root.google.cloud.recommender.v1.ValueMatcher.decode(reader, reader.uint32()); + break; + case 8: + reader.skip().pos++; + if (message.pathFilters === $util.emptyObject) + message.pathFilters = {}; + key = reader.string(); + reader.pos++; + message.pathFilters[key] = $root.google.protobuf.Value.decode(reader, reader.uint32()); + break; + case 11: + reader.skip().pos++; + if (message.pathValueMatchers === $util.emptyObject) + message.pathValueMatchers = {}; + key = reader.string(); + reader.pos++; + message.pathValueMatchers[key] = $root.google.cloud.recommender.v1.ValueMatcher.decode(reader, reader.uint32()); break; default: reader.skipType(tag & 7); @@ -1925,176 +2355,242 @@ }; /** - * Decodes an Impact message from the specified reader or buffer, length delimited. + * Decodes an Operation message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.cloud.recommender.v1.Impact + * @memberof google.cloud.recommender.v1.Operation * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.recommender.v1.Impact} Impact + * @returns {google.cloud.recommender.v1.Operation} Operation * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Impact.decodeDelimited = function decodeDelimited(reader) { + Operation.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies an Impact message. + * Verifies an Operation message. * @function verify - * @memberof google.cloud.recommender.v1.Impact + * @memberof google.cloud.recommender.v1.Operation * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - Impact.verify = function verify(message) { + Operation.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; var properties = {}; - if (message.category != null && message.hasOwnProperty("category")) - switch (message.category) { - default: - return "category: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - break; + if (message.action != null && message.hasOwnProperty("action")) + if (!$util.isString(message.action)) + return "action: string expected"; + if (message.resourceType != null && message.hasOwnProperty("resourceType")) + if (!$util.isString(message.resourceType)) + return "resourceType: string expected"; + if (message.resource != null && message.hasOwnProperty("resource")) + if (!$util.isString(message.resource)) + return "resource: string expected"; + if (message.path != null && message.hasOwnProperty("path")) + if (!$util.isString(message.path)) + return "path: string expected"; + if (message.sourceResource != null && message.hasOwnProperty("sourceResource")) + if (!$util.isString(message.sourceResource)) + return "sourceResource: string expected"; + if (message.sourcePath != null && message.hasOwnProperty("sourcePath")) + if (!$util.isString(message.sourcePath)) + return "sourcePath: string expected"; + if (message.value != null && message.hasOwnProperty("value")) { + properties.pathValue = 1; + { + var error = $root.google.protobuf.Value.verify(message.value); + if (error) + return "value." + error; } - if (message.costProjection != null && message.hasOwnProperty("costProjection")) { - properties.projection = 1; + } + if (message.valueMatcher != null && message.hasOwnProperty("valueMatcher")) { + if (properties.pathValue === 1) + return "pathValue: multiple values"; + properties.pathValue = 1; { - var error = $root.google.cloud.recommender.v1.CostProjection.verify(message.costProjection); + var error = $root.google.cloud.recommender.v1.ValueMatcher.verify(message.valueMatcher); if (error) - return "costProjection." + error; + return "valueMatcher." + error; + } + } + if (message.pathFilters != null && message.hasOwnProperty("pathFilters")) { + if (!$util.isObject(message.pathFilters)) + return "pathFilters: object expected"; + var key = Object.keys(message.pathFilters); + for (var i = 0; i < key.length; ++i) { + var error = $root.google.protobuf.Value.verify(message.pathFilters[key[i]]); + if (error) + return "pathFilters." + error; + } + } + if (message.pathValueMatchers != null && message.hasOwnProperty("pathValueMatchers")) { + if (!$util.isObject(message.pathValueMatchers)) + return "pathValueMatchers: object expected"; + var key = Object.keys(message.pathValueMatchers); + for (var i = 0; i < key.length; ++i) { + var error = $root.google.cloud.recommender.v1.ValueMatcher.verify(message.pathValueMatchers[key[i]]); + if (error) + return "pathValueMatchers." + error; } } return null; }; /** - * Creates an Impact message from a plain object. Also converts values to their respective internal types. + * Creates an Operation message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.cloud.recommender.v1.Impact + * @memberof google.cloud.recommender.v1.Operation * @static * @param {Object.} object Plain object - * @returns {google.cloud.recommender.v1.Impact} Impact + * @returns {google.cloud.recommender.v1.Operation} Operation */ - Impact.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.recommender.v1.Impact) + Operation.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.Operation) return object; - var message = new $root.google.cloud.recommender.v1.Impact(); - switch (object.category) { - case "CATEGORY_UNSPECIFIED": - case 0: - message.category = 0; - break; - case "COST": - case 1: - message.category = 1; - break; - case "SECURITY": - case 2: - message.category = 2; - break; - case "PERFORMANCE": - case 3: - message.category = 3; - break; - case "MANAGEABILITY": - case 4: - message.category = 4; - break; + var message = new $root.google.cloud.recommender.v1.Operation(); + if (object.action != null) + message.action = String(object.action); + if (object.resourceType != null) + message.resourceType = String(object.resourceType); + if (object.resource != null) + message.resource = String(object.resource); + if (object.path != null) + message.path = String(object.path); + if (object.sourceResource != null) + message.sourceResource = String(object.sourceResource); + if (object.sourcePath != null) + message.sourcePath = String(object.sourcePath); + if (object.value != null) { + if (typeof object.value !== "object") + throw TypeError(".google.cloud.recommender.v1.Operation.value: object expected"); + message.value = $root.google.protobuf.Value.fromObject(object.value); } - if (object.costProjection != null) { - if (typeof object.costProjection !== "object") - throw TypeError(".google.cloud.recommender.v1.Impact.costProjection: object expected"); - message.costProjection = $root.google.cloud.recommender.v1.CostProjection.fromObject(object.costProjection); + if (object.valueMatcher != null) { + if (typeof object.valueMatcher !== "object") + throw TypeError(".google.cloud.recommender.v1.Operation.valueMatcher: object expected"); + message.valueMatcher = $root.google.cloud.recommender.v1.ValueMatcher.fromObject(object.valueMatcher); + } + if (object.pathFilters) { + if (typeof object.pathFilters !== "object") + throw TypeError(".google.cloud.recommender.v1.Operation.pathFilters: object expected"); + message.pathFilters = {}; + for (var keys = Object.keys(object.pathFilters), i = 0; i < keys.length; ++i) { + if (typeof object.pathFilters[keys[i]] !== "object") + throw TypeError(".google.cloud.recommender.v1.Operation.pathFilters: object expected"); + message.pathFilters[keys[i]] = $root.google.protobuf.Value.fromObject(object.pathFilters[keys[i]]); + } + } + if (object.pathValueMatchers) { + if (typeof object.pathValueMatchers !== "object") + throw TypeError(".google.cloud.recommender.v1.Operation.pathValueMatchers: object expected"); + message.pathValueMatchers = {}; + for (var keys = Object.keys(object.pathValueMatchers), i = 0; i < keys.length; ++i) { + if (typeof object.pathValueMatchers[keys[i]] !== "object") + throw TypeError(".google.cloud.recommender.v1.Operation.pathValueMatchers: object expected"); + message.pathValueMatchers[keys[i]] = $root.google.cloud.recommender.v1.ValueMatcher.fromObject(object.pathValueMatchers[keys[i]]); + } } return message; }; /** - * Creates a plain object from an Impact message. Also converts values to other types if specified. + * Creates a plain object from an Operation message. Also converts values to other types if specified. * @function toObject - * @memberof google.cloud.recommender.v1.Impact + * @memberof google.cloud.recommender.v1.Operation * @static - * @param {google.cloud.recommender.v1.Impact} message Impact + * @param {google.cloud.recommender.v1.Operation} message Operation * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - Impact.toObject = function toObject(message, options) { + Operation.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.defaults) - object.category = options.enums === String ? "CATEGORY_UNSPECIFIED" : 0; - if (message.category != null && message.hasOwnProperty("category")) - object.category = options.enums === String ? $root.google.cloud.recommender.v1.Impact.Category[message.category] : message.category; - if (message.costProjection != null && message.hasOwnProperty("costProjection")) { - object.costProjection = $root.google.cloud.recommender.v1.CostProjection.toObject(message.costProjection, options); + if (options.objects || options.defaults) { + object.pathFilters = {}; + object.pathValueMatchers = {}; + } + if (options.defaults) { + object.action = ""; + object.resourceType = ""; + object.resource = ""; + object.path = ""; + object.sourceResource = ""; + object.sourcePath = ""; + } + if (message.action != null && message.hasOwnProperty("action")) + object.action = message.action; + if (message.resourceType != null && message.hasOwnProperty("resourceType")) + object.resourceType = message.resourceType; + if (message.resource != null && message.hasOwnProperty("resource")) + object.resource = message.resource; + if (message.path != null && message.hasOwnProperty("path")) + object.path = message.path; + if (message.sourceResource != null && message.hasOwnProperty("sourceResource")) + object.sourceResource = message.sourceResource; + if (message.sourcePath != null && message.hasOwnProperty("sourcePath")) + object.sourcePath = message.sourcePath; + if (message.value != null && message.hasOwnProperty("value")) { + object.value = $root.google.protobuf.Value.toObject(message.value, options); if (options.oneofs) - object.projection = "costProjection"; + object.pathValue = "value"; } - return object; - }; - - /** - * Converts this Impact to JSON. - * @function toJSON - * @memberof google.cloud.recommender.v1.Impact - * @instance - * @returns {Object.} JSON object - */ - Impact.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; + var keys2; + if (message.pathFilters && (keys2 = Object.keys(message.pathFilters)).length) { + object.pathFilters = {}; + for (var j = 0; j < keys2.length; ++j) + object.pathFilters[keys2[j]] = $root.google.protobuf.Value.toObject(message.pathFilters[keys2[j]], options); + } + if (message.valueMatcher != null && message.hasOwnProperty("valueMatcher")) { + object.valueMatcher = $root.google.cloud.recommender.v1.ValueMatcher.toObject(message.valueMatcher, options); + if (options.oneofs) + object.pathValue = "valueMatcher"; + } + if (message.pathValueMatchers && (keys2 = Object.keys(message.pathValueMatchers)).length) { + object.pathValueMatchers = {}; + for (var j = 0; j < keys2.length; ++j) + object.pathValueMatchers[keys2[j]] = $root.google.cloud.recommender.v1.ValueMatcher.toObject(message.pathValueMatchers[keys2[j]], options); + } + return object; + }; /** - * Category enum. - * @name google.cloud.recommender.v1.Impact.Category - * @enum {number} - * @property {number} CATEGORY_UNSPECIFIED=0 CATEGORY_UNSPECIFIED value - * @property {number} COST=1 COST value - * @property {number} SECURITY=2 SECURITY value - * @property {number} PERFORMANCE=3 PERFORMANCE value - * @property {number} MANAGEABILITY=4 MANAGEABILITY value + * Converts this Operation to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.Operation + * @instance + * @returns {Object.} JSON object */ - Impact.Category = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "CATEGORY_UNSPECIFIED"] = 0; - values[valuesById[1] = "COST"] = 1; - values[valuesById[2] = "SECURITY"] = 2; - values[valuesById[3] = "PERFORMANCE"] = 3; - values[valuesById[4] = "MANAGEABILITY"] = 4; - return values; - })(); + Operation.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - return Impact; + return Operation; })(); - v1.RecommendationStateInfo = (function() { + v1.ValueMatcher = (function() { /** - * Properties of a RecommendationStateInfo. + * Properties of a ValueMatcher. * @memberof google.cloud.recommender.v1 - * @interface IRecommendationStateInfo - * @property {google.cloud.recommender.v1.RecommendationStateInfo.State|null} [state] RecommendationStateInfo state - * @property {Object.|null} [stateMetadata] RecommendationStateInfo stateMetadata + * @interface IValueMatcher + * @property {string|null} [matchesPattern] ValueMatcher matchesPattern */ /** - * Constructs a new RecommendationStateInfo. + * Constructs a new ValueMatcher. * @memberof google.cloud.recommender.v1 - * @classdesc Represents a RecommendationStateInfo. - * @implements IRecommendationStateInfo + * @classdesc Represents a ValueMatcher. + * @implements IValueMatcher * @constructor - * @param {google.cloud.recommender.v1.IRecommendationStateInfo=} [properties] Properties to set + * @param {google.cloud.recommender.v1.IValueMatcher=} [properties] Properties to set */ - function RecommendationStateInfo(properties) { - this.stateMetadata = {}; + function ValueMatcher(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -2102,94 +2598,89 @@ } /** - * RecommendationStateInfo state. - * @member {google.cloud.recommender.v1.RecommendationStateInfo.State} state - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * ValueMatcher matchesPattern. + * @member {string} matchesPattern + * @memberof google.cloud.recommender.v1.ValueMatcher * @instance */ - RecommendationStateInfo.prototype.state = 0; + ValueMatcher.prototype.matchesPattern = ""; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; /** - * RecommendationStateInfo stateMetadata. - * @member {Object.} stateMetadata - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * ValueMatcher matchVariant. + * @member {"matchesPattern"|undefined} matchVariant + * @memberof google.cloud.recommender.v1.ValueMatcher * @instance */ - RecommendationStateInfo.prototype.stateMetadata = $util.emptyObject; + Object.defineProperty(ValueMatcher.prototype, "matchVariant", { + get: $util.oneOfGetter($oneOfFields = ["matchesPattern"]), + set: $util.oneOfSetter($oneOfFields) + }); /** - * Creates a new RecommendationStateInfo instance using the specified properties. + * Creates a new ValueMatcher instance using the specified properties. * @function create - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @static - * @param {google.cloud.recommender.v1.IRecommendationStateInfo=} [properties] Properties to set - * @returns {google.cloud.recommender.v1.RecommendationStateInfo} RecommendationStateInfo instance + * @param {google.cloud.recommender.v1.IValueMatcher=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.ValueMatcher} ValueMatcher instance */ - RecommendationStateInfo.create = function create(properties) { - return new RecommendationStateInfo(properties); + ValueMatcher.create = function create(properties) { + return new ValueMatcher(properties); }; /** - * Encodes the specified RecommendationStateInfo message. Does not implicitly {@link google.cloud.recommender.v1.RecommendationStateInfo.verify|verify} messages. + * Encodes the specified ValueMatcher message. Does not implicitly {@link google.cloud.recommender.v1.ValueMatcher.verify|verify} messages. * @function encode - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @static - * @param {google.cloud.recommender.v1.IRecommendationStateInfo} message RecommendationStateInfo message or plain object to encode + * @param {google.cloud.recommender.v1.IValueMatcher} message ValueMatcher message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - RecommendationStateInfo.encode = function encode(message, writer) { + ValueMatcher.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.state != null && Object.hasOwnProperty.call(message, "state")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.state); - if (message.stateMetadata != null && Object.hasOwnProperty.call(message, "stateMetadata")) - for (var keys = Object.keys(message.stateMetadata), i = 0; i < keys.length; ++i) - writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.stateMetadata[keys[i]]).ldelim(); + if (message.matchesPattern != null && Object.hasOwnProperty.call(message, "matchesPattern")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.matchesPattern); return writer; }; /** - * Encodes the specified RecommendationStateInfo message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.RecommendationStateInfo.verify|verify} messages. + * Encodes the specified ValueMatcher message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.ValueMatcher.verify|verify} messages. * @function encodeDelimited - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @static - * @param {google.cloud.recommender.v1.IRecommendationStateInfo} message RecommendationStateInfo message or plain object to encode + * @param {google.cloud.recommender.v1.IValueMatcher} message ValueMatcher message or plain object to encode * @param {$protobuf.Writer} [writer] Writer to encode to * @returns {$protobuf.Writer} Writer */ - RecommendationStateInfo.encodeDelimited = function encodeDelimited(message, writer) { + ValueMatcher.encodeDelimited = function encodeDelimited(message, writer) { return this.encode(message, writer).ldelim(); }; /** - * Decodes a RecommendationStateInfo message from the specified reader or buffer. + * Decodes a ValueMatcher message from the specified reader or buffer. * @function decode - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from * @param {number} [length] Message length if known beforehand - * @returns {google.cloud.recommender.v1.RecommendationStateInfo} RecommendationStateInfo + * @returns {google.cloud.recommender.v1.ValueMatcher} ValueMatcher * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - RecommendationStateInfo.decode = function decode(reader, length) { + ValueMatcher.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.RecommendationStateInfo(), key; + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.ValueMatcher(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.state = reader.int32(); - break; - case 2: - reader.skip().pos++; - if (message.stateMetadata === $util.emptyObject) - message.stateMetadata = {}; - key = reader.string(); - reader.pos++; - message.stateMetadata[key] = reader.string(); + message.matchesPattern = reader.string(); break; default: reader.skipType(tag & 7); @@ -2200,365 +2691,2104 @@ }; /** - * Decodes a RecommendationStateInfo message from the specified reader or buffer, length delimited. + * Decodes a ValueMatcher message from the specified reader or buffer, length delimited. * @function decodeDelimited - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @static * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {google.cloud.recommender.v1.RecommendationStateInfo} RecommendationStateInfo + * @returns {google.cloud.recommender.v1.ValueMatcher} ValueMatcher * @throws {Error} If the payload is not a reader or valid buffer * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - RecommendationStateInfo.decodeDelimited = function decodeDelimited(reader) { + ValueMatcher.decodeDelimited = function decodeDelimited(reader) { if (!(reader instanceof $Reader)) reader = new $Reader(reader); return this.decode(reader, reader.uint32()); }; /** - * Verifies a RecommendationStateInfo message. + * Verifies a ValueMatcher message. * @function verify - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @static * @param {Object.} message Plain object to verify * @returns {string|null} `null` if valid, otherwise the reason why it is not */ - RecommendationStateInfo.verify = function verify(message) { + ValueMatcher.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.state != null && message.hasOwnProperty("state")) - switch (message.state) { - default: - return "state: enum value expected"; - case 0: - case 1: - case 6: - case 3: - case 4: - case 5: - break; - } - if (message.stateMetadata != null && message.hasOwnProperty("stateMetadata")) { - if (!$util.isObject(message.stateMetadata)) - return "stateMetadata: object expected"; - var key = Object.keys(message.stateMetadata); - for (var i = 0; i < key.length; ++i) - if (!$util.isString(message.stateMetadata[key[i]])) - return "stateMetadata: string{k:string} expected"; + var properties = {}; + if (message.matchesPattern != null && message.hasOwnProperty("matchesPattern")) { + properties.matchVariant = 1; + if (!$util.isString(message.matchesPattern)) + return "matchesPattern: string expected"; } return null; }; /** - * Creates a RecommendationStateInfo message from a plain object. Also converts values to their respective internal types. + * Creates a ValueMatcher message from a plain object. Also converts values to their respective internal types. * @function fromObject - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @static * @param {Object.} object Plain object - * @returns {google.cloud.recommender.v1.RecommendationStateInfo} RecommendationStateInfo + * @returns {google.cloud.recommender.v1.ValueMatcher} ValueMatcher */ - RecommendationStateInfo.fromObject = function fromObject(object) { - if (object instanceof $root.google.cloud.recommender.v1.RecommendationStateInfo) + ValueMatcher.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.ValueMatcher) return object; - var message = new $root.google.cloud.recommender.v1.RecommendationStateInfo(); - switch (object.state) { - case "STATE_UNSPECIFIED": - case 0: - message.state = 0; - break; - case "ACTIVE": - case 1: - message.state = 1; - break; - case "CLAIMED": - case 6: - message.state = 6; - break; - case "SUCCEEDED": - case 3: - message.state = 3; - break; - case "FAILED": - case 4: - message.state = 4; - break; - case "DISMISSED": - case 5: - message.state = 5; - break; - } - if (object.stateMetadata) { - if (typeof object.stateMetadata !== "object") - throw TypeError(".google.cloud.recommender.v1.RecommendationStateInfo.stateMetadata: object expected"); - message.stateMetadata = {}; - for (var keys = Object.keys(object.stateMetadata), i = 0; i < keys.length; ++i) - message.stateMetadata[keys[i]] = String(object.stateMetadata[keys[i]]); - } + var message = new $root.google.cloud.recommender.v1.ValueMatcher(); + if (object.matchesPattern != null) + message.matchesPattern = String(object.matchesPattern); return message; }; /** - * Creates a plain object from a RecommendationStateInfo message. Also converts values to other types if specified. + * Creates a plain object from a ValueMatcher message. Also converts values to other types if specified. * @function toObject - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @static - * @param {google.cloud.recommender.v1.RecommendationStateInfo} message RecommendationStateInfo + * @param {google.cloud.recommender.v1.ValueMatcher} message ValueMatcher * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - RecommendationStateInfo.toObject = function toObject(message, options) { + ValueMatcher.toObject = function toObject(message, options) { if (!options) options = {}; var object = {}; - if (options.objects || options.defaults) - object.stateMetadata = {}; - if (options.defaults) - object.state = options.enums === String ? "STATE_UNSPECIFIED" : 0; - if (message.state != null && message.hasOwnProperty("state")) - object.state = options.enums === String ? $root.google.cloud.recommender.v1.RecommendationStateInfo.State[message.state] : message.state; - var keys2; - if (message.stateMetadata && (keys2 = Object.keys(message.stateMetadata)).length) { - object.stateMetadata = {}; - for (var j = 0; j < keys2.length; ++j) - object.stateMetadata[keys2[j]] = message.stateMetadata[keys2[j]]; + if (message.matchesPattern != null && message.hasOwnProperty("matchesPattern")) { + object.matchesPattern = message.matchesPattern; + if (options.oneofs) + object.matchVariant = "matchesPattern"; } return object; }; /** - * Converts this RecommendationStateInfo to JSON. + * Converts this ValueMatcher to JSON. * @function toJSON - * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @memberof google.cloud.recommender.v1.ValueMatcher * @instance * @returns {Object.} JSON object */ - RecommendationStateInfo.prototype.toJSON = function toJSON() { + ValueMatcher.prototype.toJSON = function toJSON() { return this.constructor.toObject(this, $protobuf.util.toJSONOptions); }; + return ValueMatcher; + })(); + + v1.CostProjection = (function() { + + /** + * Properties of a CostProjection. + * @memberof google.cloud.recommender.v1 + * @interface ICostProjection + * @property {google.type.IMoney|null} [cost] CostProjection cost + * @property {google.protobuf.IDuration|null} [duration] CostProjection duration + */ + + /** + * Constructs a new CostProjection. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents a CostProjection. + * @implements ICostProjection + * @constructor + * @param {google.cloud.recommender.v1.ICostProjection=} [properties] Properties to set + */ + function CostProjection(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * CostProjection cost. + * @member {google.type.IMoney|null|undefined} cost + * @memberof google.cloud.recommender.v1.CostProjection + * @instance + */ + CostProjection.prototype.cost = null; + + /** + * CostProjection duration. + * @member {google.protobuf.IDuration|null|undefined} duration + * @memberof google.cloud.recommender.v1.CostProjection + * @instance + */ + CostProjection.prototype.duration = null; + + /** + * Creates a new CostProjection instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.CostProjection + * @static + * @param {google.cloud.recommender.v1.ICostProjection=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.CostProjection} CostProjection instance + */ + CostProjection.create = function create(properties) { + return new CostProjection(properties); + }; + + /** + * Encodes the specified CostProjection message. Does not implicitly {@link google.cloud.recommender.v1.CostProjection.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.CostProjection + * @static + * @param {google.cloud.recommender.v1.ICostProjection} message CostProjection message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CostProjection.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.cost != null && Object.hasOwnProperty.call(message, "cost")) + $root.google.type.Money.encode(message.cost, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.duration != null && Object.hasOwnProperty.call(message, "duration")) + $root.google.protobuf.Duration.encode(message.duration, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified CostProjection message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.CostProjection.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.CostProjection + * @static + * @param {google.cloud.recommender.v1.ICostProjection} message CostProjection message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + CostProjection.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a CostProjection message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.CostProjection + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.CostProjection} CostProjection + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CostProjection.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.CostProjection(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.cost = $root.google.type.Money.decode(reader, reader.uint32()); + break; + case 2: + message.duration = $root.google.protobuf.Duration.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a CostProjection message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.CostProjection + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.CostProjection} CostProjection + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + CostProjection.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a CostProjection message. + * @function verify + * @memberof google.cloud.recommender.v1.CostProjection + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + CostProjection.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.cost != null && message.hasOwnProperty("cost")) { + var error = $root.google.type.Money.verify(message.cost); + if (error) + return "cost." + error; + } + if (message.duration != null && message.hasOwnProperty("duration")) { + var error = $root.google.protobuf.Duration.verify(message.duration); + if (error) + return "duration." + error; + } + return null; + }; + + /** + * Creates a CostProjection message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.CostProjection + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.CostProjection} CostProjection + */ + CostProjection.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.CostProjection) + return object; + var message = new $root.google.cloud.recommender.v1.CostProjection(); + if (object.cost != null) { + if (typeof object.cost !== "object") + throw TypeError(".google.cloud.recommender.v1.CostProjection.cost: object expected"); + message.cost = $root.google.type.Money.fromObject(object.cost); + } + if (object.duration != null) { + if (typeof object.duration !== "object") + throw TypeError(".google.cloud.recommender.v1.CostProjection.duration: object expected"); + message.duration = $root.google.protobuf.Duration.fromObject(object.duration); + } + return message; + }; + + /** + * Creates a plain object from a CostProjection message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.CostProjection + * @static + * @param {google.cloud.recommender.v1.CostProjection} message CostProjection + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + CostProjection.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.cost = null; + object.duration = null; + } + if (message.cost != null && message.hasOwnProperty("cost")) + object.cost = $root.google.type.Money.toObject(message.cost, options); + if (message.duration != null && message.hasOwnProperty("duration")) + object.duration = $root.google.protobuf.Duration.toObject(message.duration, options); + return object; + }; + + /** + * Converts this CostProjection to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.CostProjection + * @instance + * @returns {Object.} JSON object + */ + CostProjection.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return CostProjection; + })(); + + v1.Impact = (function() { + + /** + * Properties of an Impact. + * @memberof google.cloud.recommender.v1 + * @interface IImpact + * @property {google.cloud.recommender.v1.Impact.Category|null} [category] Impact category + * @property {google.cloud.recommender.v1.ICostProjection|null} [costProjection] Impact costProjection + */ + + /** + * Constructs a new Impact. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents an Impact. + * @implements IImpact + * @constructor + * @param {google.cloud.recommender.v1.IImpact=} [properties] Properties to set + */ + function Impact(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Impact category. + * @member {google.cloud.recommender.v1.Impact.Category} category + * @memberof google.cloud.recommender.v1.Impact + * @instance + */ + Impact.prototype.category = 0; + + /** + * Impact costProjection. + * @member {google.cloud.recommender.v1.ICostProjection|null|undefined} costProjection + * @memberof google.cloud.recommender.v1.Impact + * @instance + */ + Impact.prototype.costProjection = null; + + // OneOf field names bound to virtual getters and setters + var $oneOfFields; + + /** + * Impact projection. + * @member {"costProjection"|undefined} projection + * @memberof google.cloud.recommender.v1.Impact + * @instance + */ + Object.defineProperty(Impact.prototype, "projection", { + get: $util.oneOfGetter($oneOfFields = ["costProjection"]), + set: $util.oneOfSetter($oneOfFields) + }); + + /** + * Creates a new Impact instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.Impact + * @static + * @param {google.cloud.recommender.v1.IImpact=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.Impact} Impact instance + */ + Impact.create = function create(properties) { + return new Impact(properties); + }; + + /** + * Encodes the specified Impact message. Does not implicitly {@link google.cloud.recommender.v1.Impact.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.Impact + * @static + * @param {google.cloud.recommender.v1.IImpact} message Impact message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Impact.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.category != null && Object.hasOwnProperty.call(message, "category")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.category); + 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(); + return writer; + }; + + /** + * Encodes the specified Impact message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.Impact.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.Impact + * @static + * @param {google.cloud.recommender.v1.IImpact} message Impact message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Impact.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes an Impact message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.Impact + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.Impact} Impact + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Impact.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.Impact(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.category = reader.int32(); + break; + case 100: + message.costProjection = $root.google.cloud.recommender.v1.CostProjection.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes an Impact message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.Impact + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.Impact} Impact + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Impact.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies an Impact message. + * @function verify + * @memberof google.cloud.recommender.v1.Impact + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Impact.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + var properties = {}; + if (message.category != null && message.hasOwnProperty("category")) + switch (message.category) { + default: + return "category: enum value expected"; + case 0: + case 1: + case 2: + case 3: + case 4: + break; + } + if (message.costProjection != null && message.hasOwnProperty("costProjection")) { + properties.projection = 1; + { + var error = $root.google.cloud.recommender.v1.CostProjection.verify(message.costProjection); + if (error) + return "costProjection." + error; + } + } + return null; + }; + + /** + * Creates an Impact message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.Impact + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.Impact} Impact + */ + Impact.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.Impact) + return object; + var message = new $root.google.cloud.recommender.v1.Impact(); + switch (object.category) { + case "CATEGORY_UNSPECIFIED": + case 0: + message.category = 0; + break; + case "COST": + case 1: + message.category = 1; + break; + case "SECURITY": + case 2: + message.category = 2; + break; + case "PERFORMANCE": + case 3: + message.category = 3; + break; + case "MANAGEABILITY": + case 4: + message.category = 4; + break; + } + if (object.costProjection != null) { + if (typeof object.costProjection !== "object") + throw TypeError(".google.cloud.recommender.v1.Impact.costProjection: object expected"); + message.costProjection = $root.google.cloud.recommender.v1.CostProjection.fromObject(object.costProjection); + } + return message; + }; + + /** + * Creates a plain object from an Impact message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.Impact + * @static + * @param {google.cloud.recommender.v1.Impact} message Impact + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + Impact.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.category = options.enums === String ? "CATEGORY_UNSPECIFIED" : 0; + if (message.category != null && message.hasOwnProperty("category")) + object.category = options.enums === String ? $root.google.cloud.recommender.v1.Impact.Category[message.category] : message.category; + if (message.costProjection != null && message.hasOwnProperty("costProjection")) { + object.costProjection = $root.google.cloud.recommender.v1.CostProjection.toObject(message.costProjection, options); + if (options.oneofs) + object.projection = "costProjection"; + } + return object; + }; + + /** + * Converts this Impact to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.Impact + * @instance + * @returns {Object.} JSON object + */ + Impact.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Category enum. + * @name google.cloud.recommender.v1.Impact.Category + * @enum {number} + * @property {number} CATEGORY_UNSPECIFIED=0 CATEGORY_UNSPECIFIED value + * @property {number} COST=1 COST value + * @property {number} SECURITY=2 SECURITY value + * @property {number} PERFORMANCE=3 PERFORMANCE value + * @property {number} MANAGEABILITY=4 MANAGEABILITY value + */ + Impact.Category = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "CATEGORY_UNSPECIFIED"] = 0; + values[valuesById[1] = "COST"] = 1; + values[valuesById[2] = "SECURITY"] = 2; + values[valuesById[3] = "PERFORMANCE"] = 3; + values[valuesById[4] = "MANAGEABILITY"] = 4; + return values; + })(); + + return Impact; + })(); + + v1.RecommendationStateInfo = (function() { + + /** + * Properties of a RecommendationStateInfo. + * @memberof google.cloud.recommender.v1 + * @interface IRecommendationStateInfo + * @property {google.cloud.recommender.v1.RecommendationStateInfo.State|null} [state] RecommendationStateInfo state + * @property {Object.|null} [stateMetadata] RecommendationStateInfo stateMetadata + */ + + /** + * Constructs a new RecommendationStateInfo. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents a RecommendationStateInfo. + * @implements IRecommendationStateInfo + * @constructor + * @param {google.cloud.recommender.v1.IRecommendationStateInfo=} [properties] Properties to set + */ + function RecommendationStateInfo(properties) { + this.stateMetadata = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * RecommendationStateInfo state. + * @member {google.cloud.recommender.v1.RecommendationStateInfo.State} state + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @instance + */ + RecommendationStateInfo.prototype.state = 0; + + /** + * RecommendationStateInfo stateMetadata. + * @member {Object.} stateMetadata + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @instance + */ + RecommendationStateInfo.prototype.stateMetadata = $util.emptyObject; + + /** + * Creates a new RecommendationStateInfo instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @static + * @param {google.cloud.recommender.v1.IRecommendationStateInfo=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.RecommendationStateInfo} RecommendationStateInfo instance + */ + RecommendationStateInfo.create = function create(properties) { + return new RecommendationStateInfo(properties); + }; + + /** + * Encodes the specified RecommendationStateInfo message. Does not implicitly {@link google.cloud.recommender.v1.RecommendationStateInfo.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @static + * @param {google.cloud.recommender.v1.IRecommendationStateInfo} message RecommendationStateInfo message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RecommendationStateInfo.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.state != null && Object.hasOwnProperty.call(message, "state")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.state); + if (message.stateMetadata != null && Object.hasOwnProperty.call(message, "stateMetadata")) + for (var keys = Object.keys(message.stateMetadata), i = 0; i < keys.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.stateMetadata[keys[i]]).ldelim(); + return writer; + }; + + /** + * Encodes the specified RecommendationStateInfo message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.RecommendationStateInfo.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @static + * @param {google.cloud.recommender.v1.IRecommendationStateInfo} message RecommendationStateInfo message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + RecommendationStateInfo.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a RecommendationStateInfo message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.RecommendationStateInfo} RecommendationStateInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RecommendationStateInfo.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.RecommendationStateInfo(), key; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.state = reader.int32(); + break; + case 2: + reader.skip().pos++; + if (message.stateMetadata === $util.emptyObject) + message.stateMetadata = {}; + key = reader.string(); + reader.pos++; + message.stateMetadata[key] = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a RecommendationStateInfo message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.RecommendationStateInfo} RecommendationStateInfo + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + RecommendationStateInfo.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a RecommendationStateInfo message. + * @function verify + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + RecommendationStateInfo.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.state != null && message.hasOwnProperty("state")) + switch (message.state) { + default: + return "state: enum value expected"; + case 0: + case 1: + case 6: + case 3: + case 4: + case 5: + break; + } + if (message.stateMetadata != null && message.hasOwnProperty("stateMetadata")) { + if (!$util.isObject(message.stateMetadata)) + return "stateMetadata: object expected"; + var key = Object.keys(message.stateMetadata); + for (var i = 0; i < key.length; ++i) + if (!$util.isString(message.stateMetadata[key[i]])) + return "stateMetadata: string{k:string} expected"; + } + return null; + }; + + /** + * Creates a RecommendationStateInfo message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.RecommendationStateInfo} RecommendationStateInfo + */ + RecommendationStateInfo.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.RecommendationStateInfo) + return object; + var message = new $root.google.cloud.recommender.v1.RecommendationStateInfo(); + switch (object.state) { + case "STATE_UNSPECIFIED": + case 0: + message.state = 0; + break; + case "ACTIVE": + case 1: + message.state = 1; + break; + case "CLAIMED": + case 6: + message.state = 6; + break; + case "SUCCEEDED": + case 3: + message.state = 3; + break; + case "FAILED": + case 4: + message.state = 4; + break; + case "DISMISSED": + case 5: + message.state = 5; + break; + } + if (object.stateMetadata) { + if (typeof object.stateMetadata !== "object") + throw TypeError(".google.cloud.recommender.v1.RecommendationStateInfo.stateMetadata: object expected"); + message.stateMetadata = {}; + for (var keys = Object.keys(object.stateMetadata), i = 0; i < keys.length; ++i) + message.stateMetadata[keys[i]] = String(object.stateMetadata[keys[i]]); + } + return message; + }; + + /** + * Creates a plain object from a RecommendationStateInfo message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @static + * @param {google.cloud.recommender.v1.RecommendationStateInfo} message RecommendationStateInfo + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + RecommendationStateInfo.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.stateMetadata = {}; + if (options.defaults) + object.state = options.enums === String ? "STATE_UNSPECIFIED" : 0; + if (message.state != null && message.hasOwnProperty("state")) + object.state = options.enums === String ? $root.google.cloud.recommender.v1.RecommendationStateInfo.State[message.state] : message.state; + var keys2; + if (message.stateMetadata && (keys2 = Object.keys(message.stateMetadata)).length) { + object.stateMetadata = {}; + for (var j = 0; j < keys2.length; ++j) + object.stateMetadata[keys2[j]] = message.stateMetadata[keys2[j]]; + } + return object; + }; + + /** + * Converts this RecommendationStateInfo to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.RecommendationStateInfo + * @instance + * @returns {Object.} JSON object + */ + RecommendationStateInfo.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * State enum. + * @name google.cloud.recommender.v1.RecommendationStateInfo.State + * @enum {number} + * @property {number} STATE_UNSPECIFIED=0 STATE_UNSPECIFIED value + * @property {number} ACTIVE=1 ACTIVE value + * @property {number} CLAIMED=6 CLAIMED value + * @property {number} SUCCEEDED=3 SUCCEEDED value + * @property {number} FAILED=4 FAILED value + * @property {number} DISMISSED=5 DISMISSED value + */ + RecommendationStateInfo.State = (function() { + var valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "STATE_UNSPECIFIED"] = 0; + values[valuesById[1] = "ACTIVE"] = 1; + values[valuesById[6] = "CLAIMED"] = 6; + values[valuesById[3] = "SUCCEEDED"] = 3; + values[valuesById[4] = "FAILED"] = 4; + values[valuesById[5] = "DISMISSED"] = 5; + return values; + })(); + + return RecommendationStateInfo; + })(); + + v1.Recommender = (function() { + + /** + * Constructs a new Recommender service. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents a Recommender + * @extends $protobuf.rpc.Service + * @constructor + * @param {$protobuf.RPCImpl} rpcImpl RPC implementation + * @param {boolean} [requestDelimited=false] Whether requests are length-delimited + * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + */ + function Recommender(rpcImpl, requestDelimited, responseDelimited) { + $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); + } + + (Recommender.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = Recommender; + + /** + * Creates new Recommender service using the specified rpc implementation. + * @function create + * @memberof google.cloud.recommender.v1.Recommender + * @static + * @param {$protobuf.RPCImpl} rpcImpl RPC implementation + * @param {boolean} [requestDelimited=false] Whether requests are length-delimited + * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + * @returns {Recommender} RPC service. Useful where requests and/or responses are streamed. + */ + Recommender.create = function create(rpcImpl, requestDelimited, responseDelimited) { + return new this(rpcImpl, requestDelimited, responseDelimited); + }; + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#listInsights}. + * @memberof google.cloud.recommender.v1.Recommender + * @typedef ListInsightsCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.recommender.v1.ListInsightsResponse} [response] ListInsightsResponse + */ + + /** + * Calls ListInsights. + * @function listInsights + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IListInsightsRequest} request ListInsightsRequest message or plain object + * @param {google.cloud.recommender.v1.Recommender.ListInsightsCallback} callback Node-style callback called with the error, if any, and ListInsightsResponse + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Recommender.prototype.listInsights = function listInsights(request, callback) { + return this.rpcCall(listInsights, $root.google.cloud.recommender.v1.ListInsightsRequest, $root.google.cloud.recommender.v1.ListInsightsResponse, request, callback); + }, "name", { value: "ListInsights" }); + + /** + * Calls ListInsights. + * @function listInsights + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IListInsightsRequest} request ListInsightsRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#getInsight}. + * @memberof google.cloud.recommender.v1.Recommender + * @typedef GetInsightCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.recommender.v1.Insight} [response] Insight + */ + + /** + * Calls GetInsight. + * @function getInsight + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IGetInsightRequest} request GetInsightRequest message or plain object + * @param {google.cloud.recommender.v1.Recommender.GetInsightCallback} callback Node-style callback called with the error, if any, and Insight + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Recommender.prototype.getInsight = function getInsight(request, callback) { + return this.rpcCall(getInsight, $root.google.cloud.recommender.v1.GetInsightRequest, $root.google.cloud.recommender.v1.Insight, request, callback); + }, "name", { value: "GetInsight" }); + + /** + * Calls GetInsight. + * @function getInsight + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IGetInsightRequest} request GetInsightRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#markInsightAccepted}. + * @memberof google.cloud.recommender.v1.Recommender + * @typedef MarkInsightAcceptedCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.recommender.v1.Insight} [response] Insight + */ + + /** + * Calls MarkInsightAccepted. + * @function markInsightAccepted + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IMarkInsightAcceptedRequest} request MarkInsightAcceptedRequest message or plain object + * @param {google.cloud.recommender.v1.Recommender.MarkInsightAcceptedCallback} callback Node-style callback called with the error, if any, and Insight + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Recommender.prototype.markInsightAccepted = function markInsightAccepted(request, callback) { + return this.rpcCall(markInsightAccepted, $root.google.cloud.recommender.v1.MarkInsightAcceptedRequest, $root.google.cloud.recommender.v1.Insight, request, callback); + }, "name", { value: "MarkInsightAccepted" }); + + /** + * Calls MarkInsightAccepted. + * @function markInsightAccepted + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IMarkInsightAcceptedRequest} request MarkInsightAcceptedRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#listRecommendations}. + * @memberof google.cloud.recommender.v1.Recommender + * @typedef ListRecommendationsCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.recommender.v1.ListRecommendationsResponse} [response] ListRecommendationsResponse + */ + + /** + * Calls ListRecommendations. + * @function listRecommendations + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IListRecommendationsRequest} request ListRecommendationsRequest message or plain object + * @param {google.cloud.recommender.v1.Recommender.ListRecommendationsCallback} callback Node-style callback called with the error, if any, and ListRecommendationsResponse + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Recommender.prototype.listRecommendations = function listRecommendations(request, callback) { + return this.rpcCall(listRecommendations, $root.google.cloud.recommender.v1.ListRecommendationsRequest, $root.google.cloud.recommender.v1.ListRecommendationsResponse, request, callback); + }, "name", { value: "ListRecommendations" }); + + /** + * Calls ListRecommendations. + * @function listRecommendations + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IListRecommendationsRequest} request ListRecommendationsRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#getRecommendation}. + * @memberof google.cloud.recommender.v1.Recommender + * @typedef GetRecommendationCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.recommender.v1.Recommendation} [response] Recommendation + */ + + /** + * Calls GetRecommendation. + * @function getRecommendation + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IGetRecommendationRequest} request GetRecommendationRequest message or plain object + * @param {google.cloud.recommender.v1.Recommender.GetRecommendationCallback} callback Node-style callback called with the error, if any, and Recommendation + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Recommender.prototype.getRecommendation = function getRecommendation(request, callback) { + return this.rpcCall(getRecommendation, $root.google.cloud.recommender.v1.GetRecommendationRequest, $root.google.cloud.recommender.v1.Recommendation, request, callback); + }, "name", { value: "GetRecommendation" }); + + /** + * Calls GetRecommendation. + * @function getRecommendation + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IGetRecommendationRequest} request GetRecommendationRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#markRecommendationClaimed}. + * @memberof google.cloud.recommender.v1.Recommender + * @typedef MarkRecommendationClaimedCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.recommender.v1.Recommendation} [response] Recommendation + */ + + /** + * Calls MarkRecommendationClaimed. + * @function markRecommendationClaimed + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IMarkRecommendationClaimedRequest} request MarkRecommendationClaimedRequest message or plain object + * @param {google.cloud.recommender.v1.Recommender.MarkRecommendationClaimedCallback} callback Node-style callback called with the error, if any, and Recommendation + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Recommender.prototype.markRecommendationClaimed = function markRecommendationClaimed(request, callback) { + return this.rpcCall(markRecommendationClaimed, $root.google.cloud.recommender.v1.MarkRecommendationClaimedRequest, $root.google.cloud.recommender.v1.Recommendation, request, callback); + }, "name", { value: "MarkRecommendationClaimed" }); + + /** + * Calls MarkRecommendationClaimed. + * @function markRecommendationClaimed + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IMarkRecommendationClaimedRequest} request MarkRecommendationClaimedRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#markRecommendationSucceeded}. + * @memberof google.cloud.recommender.v1.Recommender + * @typedef MarkRecommendationSucceededCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.recommender.v1.Recommendation} [response] Recommendation + */ + + /** + * Calls MarkRecommendationSucceeded. + * @function markRecommendationSucceeded + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IMarkRecommendationSucceededRequest} request MarkRecommendationSucceededRequest message or plain object + * @param {google.cloud.recommender.v1.Recommender.MarkRecommendationSucceededCallback} callback Node-style callback called with the error, if any, and Recommendation + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Recommender.prototype.markRecommendationSucceeded = function markRecommendationSucceeded(request, callback) { + return this.rpcCall(markRecommendationSucceeded, $root.google.cloud.recommender.v1.MarkRecommendationSucceededRequest, $root.google.cloud.recommender.v1.Recommendation, request, callback); + }, "name", { value: "MarkRecommendationSucceeded" }); + + /** + * Calls MarkRecommendationSucceeded. + * @function markRecommendationSucceeded + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IMarkRecommendationSucceededRequest} request MarkRecommendationSucceededRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + /** + * Callback as used by {@link google.cloud.recommender.v1.Recommender#markRecommendationFailed}. + * @memberof google.cloud.recommender.v1.Recommender + * @typedef MarkRecommendationFailedCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {google.cloud.recommender.v1.Recommendation} [response] Recommendation + */ + + /** + * Calls MarkRecommendationFailed. + * @function markRecommendationFailed + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IMarkRecommendationFailedRequest} request MarkRecommendationFailedRequest message or plain object + * @param {google.cloud.recommender.v1.Recommender.MarkRecommendationFailedCallback} callback Node-style callback called with the error, if any, and Recommendation + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Recommender.prototype.markRecommendationFailed = function markRecommendationFailed(request, callback) { + return this.rpcCall(markRecommendationFailed, $root.google.cloud.recommender.v1.MarkRecommendationFailedRequest, $root.google.cloud.recommender.v1.Recommendation, request, callback); + }, "name", { value: "MarkRecommendationFailed" }); + + /** + * Calls MarkRecommendationFailed. + * @function markRecommendationFailed + * @memberof google.cloud.recommender.v1.Recommender + * @instance + * @param {google.cloud.recommender.v1.IMarkRecommendationFailedRequest} request MarkRecommendationFailedRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + return Recommender; + })(); + + v1.ListInsightsRequest = (function() { + + /** + * Properties of a ListInsightsRequest. + * @memberof google.cloud.recommender.v1 + * @interface IListInsightsRequest + * @property {string|null} [parent] ListInsightsRequest parent + * @property {number|null} [pageSize] ListInsightsRequest pageSize + * @property {string|null} [pageToken] ListInsightsRequest pageToken + * @property {string|null} [filter] ListInsightsRequest filter + */ + + /** + * Constructs a new ListInsightsRequest. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents a ListInsightsRequest. + * @implements IListInsightsRequest + * @constructor + * @param {google.cloud.recommender.v1.IListInsightsRequest=} [properties] Properties to set + */ + function ListInsightsRequest(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ListInsightsRequest parent. + * @member {string} parent + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @instance + */ + ListInsightsRequest.prototype.parent = ""; + + /** + * ListInsightsRequest pageSize. + * @member {number} pageSize + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @instance + */ + ListInsightsRequest.prototype.pageSize = 0; + + /** + * ListInsightsRequest pageToken. + * @member {string} pageToken + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @instance + */ + ListInsightsRequest.prototype.pageToken = ""; + + /** + * ListInsightsRequest filter. + * @member {string} filter + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @instance + */ + ListInsightsRequest.prototype.filter = ""; + + /** + * Creates a new ListInsightsRequest instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @static + * @param {google.cloud.recommender.v1.IListInsightsRequest=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.ListInsightsRequest} ListInsightsRequest instance + */ + ListInsightsRequest.create = function create(properties) { + return new ListInsightsRequest(properties); + }; + + /** + * Encodes the specified ListInsightsRequest message. Does not implicitly {@link google.cloud.recommender.v1.ListInsightsRequest.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @static + * @param {google.cloud.recommender.v1.IListInsightsRequest} message ListInsightsRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListInsightsRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.parent != null && Object.hasOwnProperty.call(message, "parent")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.parent); + if (message.pageSize != null && Object.hasOwnProperty.call(message, "pageSize")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.pageSize); + if (message.pageToken != null && Object.hasOwnProperty.call(message, "pageToken")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.pageToken); + if (message.filter != null && Object.hasOwnProperty.call(message, "filter")) + writer.uint32(/* id 4, wireType 2 =*/34).string(message.filter); + return writer; + }; + + /** + * Encodes the specified ListInsightsRequest message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.ListInsightsRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @static + * @param {google.cloud.recommender.v1.IListInsightsRequest} message ListInsightsRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListInsightsRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a ListInsightsRequest message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.ListInsightsRequest} ListInsightsRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListInsightsRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.ListInsightsRequest(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.parent = reader.string(); + break; + case 2: + message.pageSize = reader.int32(); + break; + case 3: + message.pageToken = reader.string(); + break; + case 4: + message.filter = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a ListInsightsRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.ListInsightsRequest} ListInsightsRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListInsightsRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ListInsightsRequest message. + * @function verify + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ListInsightsRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.parent != null && message.hasOwnProperty("parent")) + if (!$util.isString(message.parent)) + return "parent: string expected"; + if (message.pageSize != null && message.hasOwnProperty("pageSize")) + if (!$util.isInteger(message.pageSize)) + return "pageSize: integer expected"; + if (message.pageToken != null && message.hasOwnProperty("pageToken")) + if (!$util.isString(message.pageToken)) + return "pageToken: string expected"; + if (message.filter != null && message.hasOwnProperty("filter")) + if (!$util.isString(message.filter)) + return "filter: string expected"; + return null; + }; + + /** + * Creates a ListInsightsRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.ListInsightsRequest} ListInsightsRequest + */ + ListInsightsRequest.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.ListInsightsRequest) + return object; + var message = new $root.google.cloud.recommender.v1.ListInsightsRequest(); + if (object.parent != null) + message.parent = String(object.parent); + if (object.pageSize != null) + message.pageSize = object.pageSize | 0; + if (object.pageToken != null) + message.pageToken = String(object.pageToken); + if (object.filter != null) + message.filter = String(object.filter); + return message; + }; + + /** + * Creates a plain object from a ListInsightsRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @static + * @param {google.cloud.recommender.v1.ListInsightsRequest} message ListInsightsRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ListInsightsRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.parent = ""; + object.pageSize = 0; + object.pageToken = ""; + object.filter = ""; + } + if (message.parent != null && message.hasOwnProperty("parent")) + object.parent = message.parent; + if (message.pageSize != null && message.hasOwnProperty("pageSize")) + object.pageSize = message.pageSize; + if (message.pageToken != null && message.hasOwnProperty("pageToken")) + object.pageToken = message.pageToken; + if (message.filter != null && message.hasOwnProperty("filter")) + object.filter = message.filter; + return object; + }; + + /** + * Converts this ListInsightsRequest to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.ListInsightsRequest + * @instance + * @returns {Object.} JSON object + */ + ListInsightsRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ListInsightsRequest; + })(); + + v1.ListInsightsResponse = (function() { + + /** + * Properties of a ListInsightsResponse. + * @memberof google.cloud.recommender.v1 + * @interface IListInsightsResponse + * @property {Array.|null} [insights] ListInsightsResponse insights + * @property {string|null} [nextPageToken] ListInsightsResponse nextPageToken + */ + + /** + * Constructs a new ListInsightsResponse. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents a ListInsightsResponse. + * @implements IListInsightsResponse + * @constructor + * @param {google.cloud.recommender.v1.IListInsightsResponse=} [properties] Properties to set + */ + function ListInsightsResponse(properties) { + this.insights = []; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * ListInsightsResponse insights. + * @member {Array.} insights + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @instance + */ + ListInsightsResponse.prototype.insights = $util.emptyArray; + + /** + * ListInsightsResponse nextPageToken. + * @member {string} nextPageToken + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @instance + */ + ListInsightsResponse.prototype.nextPageToken = ""; + + /** + * Creates a new ListInsightsResponse instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @static + * @param {google.cloud.recommender.v1.IListInsightsResponse=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.ListInsightsResponse} ListInsightsResponse instance + */ + ListInsightsResponse.create = function create(properties) { + return new ListInsightsResponse(properties); + }; + + /** + * Encodes the specified ListInsightsResponse message. Does not implicitly {@link google.cloud.recommender.v1.ListInsightsResponse.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @static + * @param {google.cloud.recommender.v1.IListInsightsResponse} message ListInsightsResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListInsightsResponse.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.insights != null && message.insights.length) + for (var i = 0; i < message.insights.length; ++i) + $root.google.cloud.recommender.v1.Insight.encode(message.insights[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); + if (message.nextPageToken != null && Object.hasOwnProperty.call(message, "nextPageToken")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.nextPageToken); + return writer; + }; + + /** + * Encodes the specified ListInsightsResponse message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.ListInsightsResponse.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @static + * @param {google.cloud.recommender.v1.IListInsightsResponse} message ListInsightsResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + ListInsightsResponse.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + /** - * State enum. - * @name google.cloud.recommender.v1.RecommendationStateInfo.State - * @enum {number} - * @property {number} STATE_UNSPECIFIED=0 STATE_UNSPECIFIED value - * @property {number} ACTIVE=1 ACTIVE value - * @property {number} CLAIMED=6 CLAIMED value - * @property {number} SUCCEEDED=3 SUCCEEDED value - * @property {number} FAILED=4 FAILED value - * @property {number} DISMISSED=5 DISMISSED value + * Decodes a ListInsightsResponse message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.ListInsightsResponse} ListInsightsResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - RecommendationStateInfo.State = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "STATE_UNSPECIFIED"] = 0; - values[valuesById[1] = "ACTIVE"] = 1; - values[valuesById[6] = "CLAIMED"] = 6; - values[valuesById[3] = "SUCCEEDED"] = 3; - values[valuesById[4] = "FAILED"] = 4; - values[valuesById[5] = "DISMISSED"] = 5; - return values; - })(); + ListInsightsResponse.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.ListInsightsResponse(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.insights && message.insights.length)) + message.insights = []; + message.insights.push($root.google.cloud.recommender.v1.Insight.decode(reader, reader.uint32())); + break; + case 2: + message.nextPageToken = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; - return RecommendationStateInfo; + /** + * Decodes a ListInsightsResponse message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.ListInsightsResponse} ListInsightsResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + ListInsightsResponse.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a ListInsightsResponse message. + * @function verify + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + ListInsightsResponse.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.insights != null && message.hasOwnProperty("insights")) { + if (!Array.isArray(message.insights)) + return "insights: array expected"; + for (var i = 0; i < message.insights.length; ++i) { + var error = $root.google.cloud.recommender.v1.Insight.verify(message.insights[i]); + if (error) + return "insights." + error; + } + } + if (message.nextPageToken != null && message.hasOwnProperty("nextPageToken")) + if (!$util.isString(message.nextPageToken)) + return "nextPageToken: string expected"; + return null; + }; + + /** + * Creates a ListInsightsResponse message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.ListInsightsResponse} ListInsightsResponse + */ + ListInsightsResponse.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.ListInsightsResponse) + return object; + var message = new $root.google.cloud.recommender.v1.ListInsightsResponse(); + if (object.insights) { + if (!Array.isArray(object.insights)) + throw TypeError(".google.cloud.recommender.v1.ListInsightsResponse.insights: array expected"); + message.insights = []; + for (var i = 0; i < object.insights.length; ++i) { + if (typeof object.insights[i] !== "object") + throw TypeError(".google.cloud.recommender.v1.ListInsightsResponse.insights: object expected"); + message.insights[i] = $root.google.cloud.recommender.v1.Insight.fromObject(object.insights[i]); + } + } + if (object.nextPageToken != null) + message.nextPageToken = String(object.nextPageToken); + return message; + }; + + /** + * Creates a plain object from a ListInsightsResponse message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @static + * @param {google.cloud.recommender.v1.ListInsightsResponse} message ListInsightsResponse + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + ListInsightsResponse.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.arrays || options.defaults) + object.insights = []; + if (options.defaults) + object.nextPageToken = ""; + if (message.insights && message.insights.length) { + object.insights = []; + for (var j = 0; j < message.insights.length; ++j) + object.insights[j] = $root.google.cloud.recommender.v1.Insight.toObject(message.insights[j], options); + } + if (message.nextPageToken != null && message.hasOwnProperty("nextPageToken")) + object.nextPageToken = message.nextPageToken; + return object; + }; + + /** + * Converts this ListInsightsResponse to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.ListInsightsResponse + * @instance + * @returns {Object.} JSON object + */ + ListInsightsResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return ListInsightsResponse; })(); - v1.Recommender = (function() { + v1.GetInsightRequest = (function() { /** - * Constructs a new Recommender service. + * Properties of a GetInsightRequest. * @memberof google.cloud.recommender.v1 - * @classdesc Represents a Recommender - * @extends $protobuf.rpc.Service + * @interface IGetInsightRequest + * @property {string|null} [name] GetInsightRequest name + */ + + /** + * Constructs a new GetInsightRequest. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents a GetInsightRequest. + * @implements IGetInsightRequest * @constructor - * @param {$protobuf.RPCImpl} rpcImpl RPC implementation - * @param {boolean} [requestDelimited=false] Whether requests are length-delimited - * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + * @param {google.cloud.recommender.v1.IGetInsightRequest=} [properties] Properties to set */ - function Recommender(rpcImpl, requestDelimited, responseDelimited) { - $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); + function GetInsightRequest(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; } - (Recommender.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = Recommender; + /** + * GetInsightRequest name. + * @member {string} name + * @memberof google.cloud.recommender.v1.GetInsightRequest + * @instance + */ + GetInsightRequest.prototype.name = ""; /** - * Creates new Recommender service using the specified rpc implementation. + * Creates a new GetInsightRequest instance using the specified properties. * @function create - * @memberof google.cloud.recommender.v1.Recommender + * @memberof google.cloud.recommender.v1.GetInsightRequest * @static - * @param {$protobuf.RPCImpl} rpcImpl RPC implementation - * @param {boolean} [requestDelimited=false] Whether requests are length-delimited - * @param {boolean} [responseDelimited=false] Whether responses are length-delimited - * @returns {Recommender} RPC service. Useful where requests and/or responses are streamed. + * @param {google.cloud.recommender.v1.IGetInsightRequest=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.GetInsightRequest} GetInsightRequest instance */ - Recommender.create = function create(rpcImpl, requestDelimited, responseDelimited) { - return new this(rpcImpl, requestDelimited, responseDelimited); + GetInsightRequest.create = function create(properties) { + return new GetInsightRequest(properties); }; /** - * Callback as used by {@link google.cloud.recommender.v1.Recommender#listRecommendations}. - * @memberof google.cloud.recommender.v1.Recommender - * @typedef ListRecommendationsCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.cloud.recommender.v1.ListRecommendationsResponse} [response] ListRecommendationsResponse + * Encodes the specified GetInsightRequest message. Does not implicitly {@link google.cloud.recommender.v1.GetInsightRequest.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.GetInsightRequest + * @static + * @param {google.cloud.recommender.v1.IGetInsightRequest} message GetInsightRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + GetInsightRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + return writer; + }; + + /** + * Encodes the specified GetInsightRequest message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.GetInsightRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.GetInsightRequest + * @static + * @param {google.cloud.recommender.v1.IGetInsightRequest} message GetInsightRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer */ + GetInsightRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; /** - * Calls ListRecommendations. - * @function listRecommendations - * @memberof google.cloud.recommender.v1.Recommender + * Decodes a GetInsightRequest message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.GetInsightRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.GetInsightRequest} GetInsightRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GetInsightRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.GetInsightRequest(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a GetInsightRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.GetInsightRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.GetInsightRequest} GetInsightRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + GetInsightRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a GetInsightRequest message. + * @function verify + * @memberof google.cloud.recommender.v1.GetInsightRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + GetInsightRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + return null; + }; + + /** + * Creates a GetInsightRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.GetInsightRequest + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.GetInsightRequest} GetInsightRequest + */ + GetInsightRequest.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.GetInsightRequest) + return object; + var message = new $root.google.cloud.recommender.v1.GetInsightRequest(); + if (object.name != null) + message.name = String(object.name); + return message; + }; + + /** + * Creates a plain object from a GetInsightRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.GetInsightRequest + * @static + * @param {google.cloud.recommender.v1.GetInsightRequest} message GetInsightRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + GetInsightRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) + object.name = ""; + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + return object; + }; + + /** + * Converts this GetInsightRequest to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.GetInsightRequest * @instance - * @param {google.cloud.recommender.v1.IListRecommendationsRequest} request ListRecommendationsRequest message or plain object - * @param {google.cloud.recommender.v1.Recommender.ListRecommendationsCallback} callback Node-style callback called with the error, if any, and ListRecommendationsResponse - * @returns {undefined} - * @variation 1 + * @returns {Object.} JSON object + */ + GetInsightRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return GetInsightRequest; + })(); + + v1.MarkInsightAcceptedRequest = (function() { + + /** + * Properties of a MarkInsightAcceptedRequest. + * @memberof google.cloud.recommender.v1 + * @interface IMarkInsightAcceptedRequest + * @property {string|null} [name] MarkInsightAcceptedRequest name + * @property {Object.|null} [stateMetadata] MarkInsightAcceptedRequest stateMetadata + * @property {string|null} [etag] MarkInsightAcceptedRequest etag */ - Object.defineProperty(Recommender.prototype.listRecommendations = function listRecommendations(request, callback) { - return this.rpcCall(listRecommendations, $root.google.cloud.recommender.v1.ListRecommendationsRequest, $root.google.cloud.recommender.v1.ListRecommendationsResponse, request, callback); - }, "name", { value: "ListRecommendations" }); /** - * Calls ListRecommendations. - * @function listRecommendations - * @memberof google.cloud.recommender.v1.Recommender - * @instance - * @param {google.cloud.recommender.v1.IListRecommendationsRequest} request ListRecommendationsRequest message or plain object - * @returns {Promise} Promise - * @variation 2 + * Constructs a new MarkInsightAcceptedRequest. + * @memberof google.cloud.recommender.v1 + * @classdesc Represents a MarkInsightAcceptedRequest. + * @implements IMarkInsightAcceptedRequest + * @constructor + * @param {google.cloud.recommender.v1.IMarkInsightAcceptedRequest=} [properties] Properties to set */ + function MarkInsightAcceptedRequest(properties) { + this.stateMetadata = {}; + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } /** - * Callback as used by {@link google.cloud.recommender.v1.Recommender#getRecommendation}. - * @memberof google.cloud.recommender.v1.Recommender - * @typedef GetRecommendationCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.cloud.recommender.v1.Recommendation} [response] Recommendation + * MarkInsightAcceptedRequest name. + * @member {string} name + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @instance */ + MarkInsightAcceptedRequest.prototype.name = ""; /** - * Calls GetRecommendation. - * @function getRecommendation - * @memberof google.cloud.recommender.v1.Recommender + * MarkInsightAcceptedRequest stateMetadata. + * @member {Object.} stateMetadata + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest * @instance - * @param {google.cloud.recommender.v1.IGetRecommendationRequest} request GetRecommendationRequest message or plain object - * @param {google.cloud.recommender.v1.Recommender.GetRecommendationCallback} callback Node-style callback called with the error, if any, and Recommendation - * @returns {undefined} - * @variation 1 */ - Object.defineProperty(Recommender.prototype.getRecommendation = function getRecommendation(request, callback) { - return this.rpcCall(getRecommendation, $root.google.cloud.recommender.v1.GetRecommendationRequest, $root.google.cloud.recommender.v1.Recommendation, request, callback); - }, "name", { value: "GetRecommendation" }); + MarkInsightAcceptedRequest.prototype.stateMetadata = $util.emptyObject; /** - * Calls GetRecommendation. - * @function getRecommendation - * @memberof google.cloud.recommender.v1.Recommender + * MarkInsightAcceptedRequest etag. + * @member {string} etag + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest * @instance - * @param {google.cloud.recommender.v1.IGetRecommendationRequest} request GetRecommendationRequest message or plain object - * @returns {Promise} Promise - * @variation 2 */ + MarkInsightAcceptedRequest.prototype.etag = ""; /** - * Callback as used by {@link google.cloud.recommender.v1.Recommender#markRecommendationClaimed}. - * @memberof google.cloud.recommender.v1.Recommender - * @typedef MarkRecommendationClaimedCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.cloud.recommender.v1.Recommendation} [response] Recommendation + * Creates a new MarkInsightAcceptedRequest instance using the specified properties. + * @function create + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @static + * @param {google.cloud.recommender.v1.IMarkInsightAcceptedRequest=} [properties] Properties to set + * @returns {google.cloud.recommender.v1.MarkInsightAcceptedRequest} MarkInsightAcceptedRequest instance */ + MarkInsightAcceptedRequest.create = function create(properties) { + return new MarkInsightAcceptedRequest(properties); + }; /** - * Calls MarkRecommendationClaimed. - * @function markRecommendationClaimed - * @memberof google.cloud.recommender.v1.Recommender - * @instance - * @param {google.cloud.recommender.v1.IMarkRecommendationClaimedRequest} request MarkRecommendationClaimedRequest message or plain object - * @param {google.cloud.recommender.v1.Recommender.MarkRecommendationClaimedCallback} callback Node-style callback called with the error, if any, and Recommendation - * @returns {undefined} - * @variation 1 + * Encodes the specified MarkInsightAcceptedRequest message. Does not implicitly {@link google.cloud.recommender.v1.MarkInsightAcceptedRequest.verify|verify} messages. + * @function encode + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @static + * @param {google.cloud.recommender.v1.IMarkInsightAcceptedRequest} message MarkInsightAcceptedRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer */ - Object.defineProperty(Recommender.prototype.markRecommendationClaimed = function markRecommendationClaimed(request, callback) { - return this.rpcCall(markRecommendationClaimed, $root.google.cloud.recommender.v1.MarkRecommendationClaimedRequest, $root.google.cloud.recommender.v1.Recommendation, request, callback); - }, "name", { value: "MarkRecommendationClaimed" }); + MarkInsightAcceptedRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.name != null && Object.hasOwnProperty.call(message, "name")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.name); + if (message.stateMetadata != null && Object.hasOwnProperty.call(message, "stateMetadata")) + for (var keys = Object.keys(message.stateMetadata), i = 0; i < keys.length; ++i) + writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.stateMetadata[keys[i]]).ldelim(); + if (message.etag != null && Object.hasOwnProperty.call(message, "etag")) + writer.uint32(/* id 3, wireType 2 =*/26).string(message.etag); + return writer; + }; /** - * Calls MarkRecommendationClaimed. - * @function markRecommendationClaimed - * @memberof google.cloud.recommender.v1.Recommender - * @instance - * @param {google.cloud.recommender.v1.IMarkRecommendationClaimedRequest} request MarkRecommendationClaimedRequest message or plain object - * @returns {Promise} Promise - * @variation 2 + * Encodes the specified MarkInsightAcceptedRequest message, length delimited. Does not implicitly {@link google.cloud.recommender.v1.MarkInsightAcceptedRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @static + * @param {google.cloud.recommender.v1.IMarkInsightAcceptedRequest} message MarkInsightAcceptedRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer */ + MarkInsightAcceptedRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; /** - * Callback as used by {@link google.cloud.recommender.v1.Recommender#markRecommendationSucceeded}. - * @memberof google.cloud.recommender.v1.Recommender - * @typedef MarkRecommendationSucceededCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.cloud.recommender.v1.Recommendation} [response] Recommendation + * Decodes a MarkInsightAcceptedRequest message from the specified reader or buffer. + * @function decode + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {google.cloud.recommender.v1.MarkInsightAcceptedRequest} MarkInsightAcceptedRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing */ + MarkInsightAcceptedRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.cloud.recommender.v1.MarkInsightAcceptedRequest(), key; + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + reader.skip().pos++; + if (message.stateMetadata === $util.emptyObject) + message.stateMetadata = {}; + key = reader.string(); + reader.pos++; + message.stateMetadata[key] = reader.string(); + break; + case 3: + message.etag = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; /** - * Calls MarkRecommendationSucceeded. - * @function markRecommendationSucceeded - * @memberof google.cloud.recommender.v1.Recommender - * @instance - * @param {google.cloud.recommender.v1.IMarkRecommendationSucceededRequest} request MarkRecommendationSucceededRequest message or plain object - * @param {google.cloud.recommender.v1.Recommender.MarkRecommendationSucceededCallback} callback Node-style callback called with the error, if any, and Recommendation - * @returns {undefined} - * @variation 1 + * Decodes a MarkInsightAcceptedRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {google.cloud.recommender.v1.MarkInsightAcceptedRequest} MarkInsightAcceptedRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing */ - Object.defineProperty(Recommender.prototype.markRecommendationSucceeded = function markRecommendationSucceeded(request, callback) { - return this.rpcCall(markRecommendationSucceeded, $root.google.cloud.recommender.v1.MarkRecommendationSucceededRequest, $root.google.cloud.recommender.v1.Recommendation, request, callback); - }, "name", { value: "MarkRecommendationSucceeded" }); + MarkInsightAcceptedRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; /** - * Calls MarkRecommendationSucceeded. - * @function markRecommendationSucceeded - * @memberof google.cloud.recommender.v1.Recommender - * @instance - * @param {google.cloud.recommender.v1.IMarkRecommendationSucceededRequest} request MarkRecommendationSucceededRequest message or plain object - * @returns {Promise} Promise - * @variation 2 + * Verifies a MarkInsightAcceptedRequest message. + * @function verify + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not */ + MarkInsightAcceptedRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.name != null && message.hasOwnProperty("name")) + if (!$util.isString(message.name)) + return "name: string expected"; + if (message.stateMetadata != null && message.hasOwnProperty("stateMetadata")) { + if (!$util.isObject(message.stateMetadata)) + return "stateMetadata: object expected"; + var key = Object.keys(message.stateMetadata); + for (var i = 0; i < key.length; ++i) + if (!$util.isString(message.stateMetadata[key[i]])) + return "stateMetadata: string{k:string} expected"; + } + if (message.etag != null && message.hasOwnProperty("etag")) + if (!$util.isString(message.etag)) + return "etag: string expected"; + return null; + }; /** - * Callback as used by {@link google.cloud.recommender.v1.Recommender#markRecommendationFailed}. - * @memberof google.cloud.recommender.v1.Recommender - * @typedef MarkRecommendationFailedCallback - * @type {function} - * @param {Error|null} error Error, if any - * @param {google.cloud.recommender.v1.Recommendation} [response] Recommendation + * Creates a MarkInsightAcceptedRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @static + * @param {Object.} object Plain object + * @returns {google.cloud.recommender.v1.MarkInsightAcceptedRequest} MarkInsightAcceptedRequest */ + MarkInsightAcceptedRequest.fromObject = function fromObject(object) { + if (object instanceof $root.google.cloud.recommender.v1.MarkInsightAcceptedRequest) + return object; + var message = new $root.google.cloud.recommender.v1.MarkInsightAcceptedRequest(); + if (object.name != null) + message.name = String(object.name); + if (object.stateMetadata) { + if (typeof object.stateMetadata !== "object") + throw TypeError(".google.cloud.recommender.v1.MarkInsightAcceptedRequest.stateMetadata: object expected"); + message.stateMetadata = {}; + for (var keys = Object.keys(object.stateMetadata), i = 0; i < keys.length; ++i) + message.stateMetadata[keys[i]] = String(object.stateMetadata[keys[i]]); + } + if (object.etag != null) + message.etag = String(object.etag); + return message; + }; /** - * Calls MarkRecommendationFailed. - * @function markRecommendationFailed - * @memberof google.cloud.recommender.v1.Recommender - * @instance - * @param {google.cloud.recommender.v1.IMarkRecommendationFailedRequest} request MarkRecommendationFailedRequest message or plain object - * @param {google.cloud.recommender.v1.Recommender.MarkRecommendationFailedCallback} callback Node-style callback called with the error, if any, and Recommendation - * @returns {undefined} - * @variation 1 + * Creates a plain object from a MarkInsightAcceptedRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest + * @static + * @param {google.cloud.recommender.v1.MarkInsightAcceptedRequest} message MarkInsightAcceptedRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object */ - Object.defineProperty(Recommender.prototype.markRecommendationFailed = function markRecommendationFailed(request, callback) { - return this.rpcCall(markRecommendationFailed, $root.google.cloud.recommender.v1.MarkRecommendationFailedRequest, $root.google.cloud.recommender.v1.Recommendation, request, callback); - }, "name", { value: "MarkRecommendationFailed" }); + MarkInsightAcceptedRequest.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.objects || options.defaults) + object.stateMetadata = {}; + if (options.defaults) { + object.name = ""; + object.etag = ""; + } + if (message.name != null && message.hasOwnProperty("name")) + object.name = message.name; + var keys2; + if (message.stateMetadata && (keys2 = Object.keys(message.stateMetadata)).length) { + object.stateMetadata = {}; + for (var j = 0; j < keys2.length; ++j) + object.stateMetadata[keys2[j]] = message.stateMetadata[keys2[j]]; + } + if (message.etag != null && message.hasOwnProperty("etag")) + object.etag = message.etag; + return object; + }; /** - * Calls MarkRecommendationFailed. - * @function markRecommendationFailed - * @memberof google.cloud.recommender.v1.Recommender + * Converts this MarkInsightAcceptedRequest to JSON. + * @function toJSON + * @memberof google.cloud.recommender.v1.MarkInsightAcceptedRequest * @instance - * @param {google.cloud.recommender.v1.IMarkRecommendationFailedRequest} request MarkRecommendationFailedRequest message or plain object - * @returns {Promise} Promise - * @variation 2 + * @returns {Object.} JSON object */ + MarkInsightAcceptedRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; - return Recommender; + return MarkInsightAcceptedRequest; })(); v1.ListRecommendationsRequest = (function() { diff --git a/packages/google-cloud-recommender/protos/protos.json b/packages/google-cloud-recommender/protos/protos.json index 96f6c92db1d..3788184dfb5 100644 --- a/packages/google-cloud-recommender/protos/protos.json +++ b/packages/google-cloud-recommender/protos/protos.json @@ -11,13 +11,109 @@ "csharp_namespace": "Google.Cloud.Recommender.V1", "go_package": "google.golang.org/genproto/googleapis/cloud/recommender/v1;recommender", "java_multiple_files": true, + "java_outer_classname": "RecommenderProto", "java_package": "com.google.cloud.recommender.v1", "objc_class_prefix": "CREC", "(google.api.resource_definition).type": "recommender.googleapis.com/Recommender", - "(google.api.resource_definition).pattern": "projects/{project}/locations/{location}/recommenders/{recommender}", - "java_outer_classname": "RecommenderProto" + "(google.api.resource_definition).pattern": "projects/{project}/locations/{location}/recommenders/{recommender}" }, "nested": { + "Insight": { + "options": { + "(google.api.resource).type": "recommender.googleapis.com/Insight", + "(google.api.resource).pattern": "projects/{project}/locations/{location}/insightTypes/{insight_type}/insights/{insight}" + }, + "fields": { + "name": { + "type": "string", + "id": 1 + }, + "description": { + "type": "string", + "id": 2 + }, + "targetResources": { + "rule": "repeated", + "type": "string", + "id": 9 + }, + "insightSubtype": { + "type": "string", + "id": 10 + }, + "content": { + "type": "google.protobuf.Struct", + "id": 3 + }, + "lastRefreshTime": { + "type": "google.protobuf.Timestamp", + "id": 4 + }, + "observationPeriod": { + "type": "google.protobuf.Duration", + "id": 5 + }, + "stateInfo": { + "type": "InsightStateInfo", + "id": 6 + }, + "category": { + "type": "Category", + "id": 7 + }, + "etag": { + "type": "string", + "id": 11 + }, + "associatedRecommendations": { + "rule": "repeated", + "type": "RecommendationReference", + "id": 8 + } + }, + "nested": { + "RecommendationReference": { + "fields": { + "recommendation": { + "type": "string", + "id": 1 + } + } + }, + "Category": { + "values": { + "CATEGORY_UNSPECIFIED": 0, + "COST": 1, + "SECURITY": 2, + "PERFORMANCE": 3, + "MANAGEABILITY": 4 + } + } + } + }, + "InsightStateInfo": { + "fields": { + "state": { + "type": "State", + "id": 1 + }, + "stateMetadata": { + "keyType": "string", + "type": "string", + "id": 2 + } + }, + "nested": { + "State": { + "values": { + "STATE_UNSPECIFIED": 0, + "ACTIVE": 1, + "ACCEPTED": 2, + "DISMISSED": 3 + } + } + } + }, "Recommendation": { "options": { "(google.api.resource).type": "recommender.googleapis.com/Recommendation", @@ -60,6 +156,21 @@ "etag": { "type": "string", "id": 11 + }, + "associatedInsights": { + "rule": "repeated", + "type": "InsightReference", + "id": 14 + } + }, + "nested": { + "InsightReference": { + "fields": { + "insight": { + "type": "string", + "id": 1 + } + } } } }, @@ -223,6 +334,31 @@ "(google.api.oauth_scopes)": "https://www.googleapis.com/auth/cloud-platform" }, "methods": { + "ListInsights": { + "requestType": "ListInsightsRequest", + "responseType": "ListInsightsResponse", + "options": { + "(google.api.http).get": "/v1/{parent=projects/*/locations/*/insightTypes/*}/insights", + "(google.api.method_signature)": "parent" + } + }, + "GetInsight": { + "requestType": "GetInsightRequest", + "responseType": "Insight", + "options": { + "(google.api.http).get": "/v1/{name=projects/*/locations/*/insightTypes/*/insights/*}", + "(google.api.method_signature)": "name" + } + }, + "MarkInsightAccepted": { + "requestType": "MarkInsightAcceptedRequest", + "responseType": "Insight", + "options": { + "(google.api.http).post": "/v1/{name=projects/*/locations/*/insightTypes/*/insights/*}:markAccepted", + "(google.api.http).body": "*", + "(google.api.method_signature)": "name,state_metadata,etag" + } + }, "ListRecommendations": { "requestType": "ListRecommendationsRequest", "responseType": "ListRecommendationsResponse", @@ -268,6 +404,91 @@ } } }, + "ListInsightsRequest": { + "fields": { + "parent": { + "type": "string", + "id": 1, + "options": { + "(google.api.field_behavior)": "REQUIRED", + "(google.api.resource_reference).type": "recommender.googleapis.com/InsightType" + } + }, + "pageSize": { + "type": "int32", + "id": 2, + "options": { + "(google.api.field_behavior)": "OPTIONAL" + } + }, + "pageToken": { + "type": "string", + "id": 3, + "options": { + "(google.api.field_behavior)": "OPTIONAL" + } + }, + "filter": { + "type": "string", + "id": 4, + "options": { + "(google.api.field_behavior)": "OPTIONAL" + } + } + } + }, + "ListInsightsResponse": { + "fields": { + "insights": { + "rule": "repeated", + "type": "Insight", + "id": 1 + }, + "nextPageToken": { + "type": "string", + "id": 2 + } + } + }, + "GetInsightRequest": { + "fields": { + "name": { + "type": "string", + "id": 1, + "options": { + "(google.api.field_behavior)": "REQUIRED", + "(google.api.resource_reference).type": "recommender.googleapis.com/Insight" + } + } + } + }, + "MarkInsightAcceptedRequest": { + "fields": { + "name": { + "type": "string", + "id": 1, + "options": { + "(google.api.field_behavior)": "REQUIRED", + "(google.api.resource_reference).type": "recommender.googleapis.com/Insight" + } + }, + "stateMetadata": { + "keyType": "string", + "type": "string", + "id": 2, + "options": { + "(google.api.field_behavior)": "OPTIONAL" + } + }, + "etag": { + "type": "string", + "id": 3, + "options": { + "(google.api.field_behavior)": "REQUIRED" + } + } + } + }, "ListRecommendationsRequest": { "fields": { "parent": { diff --git a/packages/google-cloud-recommender/src/v1/recommender_client.ts b/packages/google-cloud-recommender/src/v1/recommender_client.ts index c9d534a316b..61b1bca3136 100644 --- a/packages/google-cloud-recommender/src/v1/recommender_client.ts +++ b/packages/google-cloud-recommender/src/v1/recommender_client.ts @@ -35,10 +35,10 @@ import * as gapicConfig from './recommender_client_config.json'; const version = require('../../../package.json').version; /** - * Provides recommendations for cloud customers for various categories like - * performance optimization, cost savings, reliability, feature discovery, etc. - * These recommendations are generated automatically based on analysis of user - * resources, configuration and monitoring metrics. + * Provides insights and recommendations for cloud customers for various + * categories like performance optimization, cost savings, reliability, feature + * discovery, etc. Insights and recommendations are generated automatically + * based on analysis of user resources, configuration and monitoring metrics. * @class * @memberof v1 */ @@ -163,6 +163,12 @@ export class RecommenderClient { // identifiers to uniquely identify resources within the API. // Create useful helper objects for these. this.pathTemplates = { + insightPathTemplate: new this._gaxModule.PathTemplate( + 'projects/{project}/locations/{location}/insightTypes/{insight_type}/insights/{insight}' + ), + insightTypePathTemplate: new this._gaxModule.PathTemplate( + 'projects/{project}/locations/{location}/insightTypes/{insight_type}' + ), recommendationPathTemplate: new this._gaxModule.PathTemplate( 'projects/{project}/locations/{location}/recommenders/{recommender}/recommendations/{recommendation}' ), @@ -175,6 +181,11 @@ export class RecommenderClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this.descriptors.page = { + listInsights: new this._gaxModule.PageDescriptor( + 'pageToken', + 'nextPageToken', + 'insights' + ), listRecommendations: new this._gaxModule.PageDescriptor( 'pageToken', 'nextPageToken', @@ -228,6 +239,9 @@ export class RecommenderClient { // Iterate over each of the methods that the service provides // and create an API call method for each. const recommenderStubMethods = [ + 'listInsights', + 'getInsight', + 'markInsightAccepted', 'listRecommendations', 'getRecommendation', 'markRecommendationClaimed', @@ -312,6 +326,193 @@ export class RecommenderClient { // ------------------- // -- Service calls -- // ------------------- + getInsight( + request: protos.google.cloud.recommender.v1.IGetInsightRequest, + options?: gax.CallOptions + ): Promise< + [ + protos.google.cloud.recommender.v1.IInsight, + protos.google.cloud.recommender.v1.IGetInsightRequest | undefined, + {} | undefined + ] + >; + getInsight( + request: protos.google.cloud.recommender.v1.IGetInsightRequest, + options: gax.CallOptions, + callback: Callback< + protos.google.cloud.recommender.v1.IInsight, + protos.google.cloud.recommender.v1.IGetInsightRequest | null | undefined, + {} | null | undefined + > + ): void; + getInsight( + request: protos.google.cloud.recommender.v1.IGetInsightRequest, + callback: Callback< + protos.google.cloud.recommender.v1.IInsight, + protos.google.cloud.recommender.v1.IGetInsightRequest | null | undefined, + {} | null | undefined + > + ): void; + /** + * Gets the requested insight. Requires the recommender.*.get IAM permission + * for the specified insight type. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. Name of the insight. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Insight]{@link google.cloud.recommender.v1.Insight}. + * The promise has a method named "cancel" which cancels the ongoing API call. + */ + getInsight( + request: protos.google.cloud.recommender.v1.IGetInsightRequest, + optionsOrCallback?: + | gax.CallOptions + | Callback< + protos.google.cloud.recommender.v1.IInsight, + | protos.google.cloud.recommender.v1.IGetInsightRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.recommender.v1.IInsight, + protos.google.cloud.recommender.v1.IGetInsightRequest | null | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.recommender.v1.IInsight, + protos.google.cloud.recommender.v1.IGetInsightRequest | undefined, + {} | undefined + ] + > | void { + request = request || {}; + let options: gax.CallOptions; + if (typeof optionsOrCallback === 'function' && callback === undefined) { + callback = optionsOrCallback; + options = {}; + } else { + options = optionsOrCallback as gax.CallOptions; + } + options = options || {}; + options.otherArgs = options.otherArgs || {}; + options.otherArgs.headers = options.otherArgs.headers || {}; + options.otherArgs.headers[ + 'x-goog-request-params' + ] = gax.routingHeader.fromParams({ + name: request.name || '', + }); + this.initialize(); + return this.innerApiCalls.getInsight(request, options, callback); + } + markInsightAccepted( + request: protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest, + options?: gax.CallOptions + ): Promise< + [ + protos.google.cloud.recommender.v1.IInsight, + ( + | protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest + | undefined + ), + {} | undefined + ] + >; + markInsightAccepted( + request: protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest, + options: gax.CallOptions, + callback: Callback< + protos.google.cloud.recommender.v1.IInsight, + | protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest + | null + | undefined, + {} | null | undefined + > + ): void; + markInsightAccepted( + request: protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest, + callback: Callback< + protos.google.cloud.recommender.v1.IInsight, + | protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest + | null + | undefined, + {} | null | undefined + > + ): void; + /** + * Marks the Insight State as Accepted. Users can use this method to + * indicate to the Recommender API that they have applied some action based + * on the insight. This stops the insight content from being updated. + * + * MarkInsightAccepted can be applied to insights in ACTIVE state. Requires + * the recommender.*.update IAM permission for the specified insight. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.name + * Required. Name of the insight. + * @param {number[]} [request.stateMetadata] + * Optional. State properties user wish to include with this state. Full replace of the + * current state_metadata. + * @param {string} request.etag + * Required. Fingerprint of the Insight. Provides optimistic locking. + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is an object representing [Insight]{@link google.cloud.recommender.v1.Insight}. + * The promise has a method named "cancel" which cancels the ongoing API call. + */ + markInsightAccepted( + request: protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest, + optionsOrCallback?: + | gax.CallOptions + | Callback< + protos.google.cloud.recommender.v1.IInsight, + | protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest + | null + | undefined, + {} | null | undefined + >, + callback?: Callback< + protos.google.cloud.recommender.v1.IInsight, + | protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest + | null + | undefined, + {} | null | undefined + > + ): Promise< + [ + protos.google.cloud.recommender.v1.IInsight, + ( + | protos.google.cloud.recommender.v1.IMarkInsightAcceptedRequest + | undefined + ), + {} | undefined + ] + > | void { + request = request || {}; + let options: gax.CallOptions; + if (typeof optionsOrCallback === 'function' && callback === undefined) { + callback = optionsOrCallback; + options = {}; + } else { + options = optionsOrCallback as gax.CallOptions; + } + options = options || {}; + options.otherArgs = options.otherArgs || {}; + options.otherArgs.headers = options.otherArgs.headers || {}; + options.otherArgs.headers[ + 'x-goog-request-params' + ] = gax.routingHeader.fromParams({ + name: request.name || '', + }); + this.initialize(); + return this.innerApiCalls.markInsightAccepted(request, options, callback); + } getRecommendation( request: protos.google.cloud.recommender.v1.IGetRecommendationRequest, options?: gax.CallOptions @@ -436,10 +637,10 @@ export class RecommenderClient { > ): void; /** - * Mark the Recommendation State as Claimed. Users can use this method to + * Marks the Recommendation State as Claimed. Users can use this method to * indicate to the Recommender API that they are starting to apply the * recommendation themselves. This stops the recommendation content from being - * updated. + * updated. Associated insights are frozen and placed in the ACCEPTED state. * * MarkRecommendationClaimed can be applied to recommendations in CLAIMED, * SUCCEEDED, FAILED, or ACTIVE state. @@ -550,10 +751,11 @@ export class RecommenderClient { > ): void; /** - * Mark the Recommendation State as Succeeded. Users can use this method to + * Marks the Recommendation State as Succeeded. Users can use this method to * indicate to the Recommender API that they have applied the recommendation * themselves, and the operation was successful. This stops the recommendation - * content from being updated. + * content from being updated. Associated insights are frozen and placed in + * the ACCEPTED state. * * MarkRecommendationSucceeded can be applied to recommendations in ACTIVE, * CLAIMED, SUCCEEDED, or FAILED state. @@ -664,10 +866,11 @@ export class RecommenderClient { > ): void; /** - * Mark the Recommendation State as Failed. Users can use this method to + * Marks the Recommendation State as Failed. Users can use this method to * indicate to the Recommender API that they have applied the recommendation * themselves, and the operation failed. This stops the recommendation content - * from being updated. + * from being updated. Associated insights are frozen and placed in the + * ACCEPTED state. * * MarkRecommendationFailed can be applied to recommendations in ACTIVE, * CLAIMED, SUCCEEDED, or FAILED state. @@ -744,6 +947,248 @@ export class RecommenderClient { ); } + listInsights( + request: protos.google.cloud.recommender.v1.IListInsightsRequest, + options?: gax.CallOptions + ): Promise< + [ + protos.google.cloud.recommender.v1.IInsight[], + protos.google.cloud.recommender.v1.IListInsightsRequest | null, + protos.google.cloud.recommender.v1.IListInsightsResponse + ] + >; + listInsights( + request: protos.google.cloud.recommender.v1.IListInsightsRequest, + options: gax.CallOptions, + callback: PaginationCallback< + protos.google.cloud.recommender.v1.IListInsightsRequest, + | protos.google.cloud.recommender.v1.IListInsightsResponse + | null + | undefined, + protos.google.cloud.recommender.v1.IInsight + > + ): void; + listInsights( + request: protos.google.cloud.recommender.v1.IListInsightsRequest, + callback: PaginationCallback< + protos.google.cloud.recommender.v1.IListInsightsRequest, + | protos.google.cloud.recommender.v1.IListInsightsResponse + | null + | undefined, + protos.google.cloud.recommender.v1.IInsight + > + ): void; + /** + * Lists insights for a Cloud project. Requires the recommender.*.list IAM + * permission for the specified insight type. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The container resource on which to execute the request. + * Acceptable formats: + * + * 1. + * "projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]", + * + * LOCATION here refers to GCP Locations: + * https://cloud.google.com/about/locations/ + * @param {number} [request.pageSize] + * Optional. The maximum number of results to return from this request. Non-positive + * values are ignored. If not specified, the server will determine the number + * of results to return. + * @param {string} [request.pageToken] + * Optional. If present, retrieves the next batch of results from the preceding call to + * this method. `page_token` must be the value of `next_page_token` from the + * previous response. The values of other method parameters must be identical + * to those in the previous call. + * @param {string} [request.filter] + * Optional. Filter expression to restrict the insights returned. Supported + * filter fields: state + * Eg: `state:"DISMISSED" or state:"ACTIVE" + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Promise} - The promise which resolves to an array. + * The first element of the array is Array of [Insight]{@link google.cloud.recommender.v1.Insight}. + * The client library support auto-pagination by default: it will call the API as many + * times as needed and will merge results from all the pages into this array. + * + * When autoPaginate: false is specified through options, the array has three elements. + * The first element is Array of [Insight]{@link google.cloud.recommender.v1.Insight} that corresponds to + * the one page received from the API server. + * If the second element is not null it contains the request object of type [ListInsightsRequest]{@link google.cloud.recommender.v1.ListInsightsRequest} + * that can be used to obtain the next page of the results. + * If it is null, the next page does not exist. + * The third element contains the raw response received from the API server. Its type is + * [ListInsightsResponse]{@link google.cloud.recommender.v1.ListInsightsResponse}. + * + * The promise has a method named "cancel" which cancels the ongoing API call. + */ + listInsights( + request: protos.google.cloud.recommender.v1.IListInsightsRequest, + optionsOrCallback?: + | gax.CallOptions + | PaginationCallback< + protos.google.cloud.recommender.v1.IListInsightsRequest, + | protos.google.cloud.recommender.v1.IListInsightsResponse + | null + | undefined, + protos.google.cloud.recommender.v1.IInsight + >, + callback?: PaginationCallback< + protos.google.cloud.recommender.v1.IListInsightsRequest, + | protos.google.cloud.recommender.v1.IListInsightsResponse + | null + | undefined, + protos.google.cloud.recommender.v1.IInsight + > + ): Promise< + [ + protos.google.cloud.recommender.v1.IInsight[], + protos.google.cloud.recommender.v1.IListInsightsRequest | null, + protos.google.cloud.recommender.v1.IListInsightsResponse + ] + > | void { + request = request || {}; + let options: gax.CallOptions; + if (typeof optionsOrCallback === 'function' && callback === undefined) { + callback = optionsOrCallback; + options = {}; + } else { + options = optionsOrCallback as gax.CallOptions; + } + options = options || {}; + options.otherArgs = options.otherArgs || {}; + options.otherArgs.headers = options.otherArgs.headers || {}; + options.otherArgs.headers[ + 'x-goog-request-params' + ] = gax.routingHeader.fromParams({ + parent: request.parent || '', + }); + this.initialize(); + return this.innerApiCalls.listInsights(request, options, callback); + } + + /** + * Equivalent to {@link listInsights}, but returns a NodeJS Stream object. + * + * This fetches the paged responses for {@link listInsights} continuously + * and invokes the callback registered for 'data' event for each element in the + * responses. + * + * The returned object has 'end' method when no more elements are required. + * + * autoPaginate option will be ignored. + * + * @see {@link https://nodejs.org/api/stream.html} + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The container resource on which to execute the request. + * Acceptable formats: + * + * 1. + * "projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]", + * + * LOCATION here refers to GCP Locations: + * https://cloud.google.com/about/locations/ + * @param {number} [request.pageSize] + * Optional. The maximum number of results to return from this request. Non-positive + * values are ignored. If not specified, the server will determine the number + * of results to return. + * @param {string} [request.pageToken] + * Optional. If present, retrieves the next batch of results from the preceding call to + * this method. `page_token` must be the value of `next_page_token` from the + * previous response. The values of other method parameters must be identical + * to those in the previous call. + * @param {string} [request.filter] + * Optional. Filter expression to restrict the insights returned. Supported + * filter fields: state + * Eg: `state:"DISMISSED" or state:"ACTIVE" + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Stream} + * An object stream which emits an object representing [Insight]{@link google.cloud.recommender.v1.Insight} on 'data' event. + */ + listInsightsStream( + request?: protos.google.cloud.recommender.v1.IListInsightsRequest, + options?: gax.CallOptions + ): Transform { + request = request || {}; + options = options || {}; + options.otherArgs = options.otherArgs || {}; + options.otherArgs.headers = options.otherArgs.headers || {}; + options.otherArgs.headers[ + 'x-goog-request-params' + ] = gax.routingHeader.fromParams({ + parent: request.parent || '', + }); + const callSettings = new gax.CallSettings(options); + this.initialize(); + return this.descriptors.page.listInsights.createStream( + this.innerApiCalls.listInsights as gax.GaxCall, + request, + callSettings + ); + } + + /** + * Equivalent to {@link listInsights}, but returns an iterable object. + * + * for-await-of syntax is used with the iterable to recursively get response element on-demand. + * + * @param {Object} request + * The request object that will be sent. + * @param {string} request.parent + * Required. The container resource on which to execute the request. + * Acceptable formats: + * + * 1. + * "projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]", + * + * LOCATION here refers to GCP Locations: + * https://cloud.google.com/about/locations/ + * @param {number} [request.pageSize] + * Optional. The maximum number of results to return from this request. Non-positive + * values are ignored. If not specified, the server will determine the number + * of results to return. + * @param {string} [request.pageToken] + * Optional. If present, retrieves the next batch of results from the preceding call to + * this method. `page_token` must be the value of `next_page_token` from the + * previous response. The values of other method parameters must be identical + * to those in the previous call. + * @param {string} [request.filter] + * Optional. Filter expression to restrict the insights returned. Supported + * filter fields: state + * Eg: `state:"DISMISSED" or state:"ACTIVE" + * @param {object} [options] + * Call options. See {@link https://googleapis.dev/nodejs/google-gax/latest/interfaces/CallOptions.html|CallOptions} for more details. + * @returns {Object} + * An iterable Object that conforms to @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols. + */ + listInsightsAsync( + request?: protos.google.cloud.recommender.v1.IListInsightsRequest, + options?: gax.CallOptions + ): AsyncIterable { + request = request || {}; + options = options || {}; + options.otherArgs = options.otherArgs || {}; + options.otherArgs.headers = options.otherArgs.headers || {}; + options.otherArgs.headers[ + 'x-goog-request-params' + ] = gax.routingHeader.fromParams({ + parent: request.parent || '', + }); + options = options || {}; + const callSettings = new gax.CallSettings(options); + this.initialize(); + return this.descriptors.page.listInsights.asyncIterate( + this.innerApiCalls['listInsights'] as GaxCall, + (request as unknown) as RequestType, + callSettings + ) as AsyncIterable; + } listRecommendations( request: protos.google.cloud.recommender.v1.IListRecommendationsRequest, options?: gax.CallOptions @@ -990,6 +1435,126 @@ export class RecommenderClient { // -- Path templates -- // -------------------- + /** + * Return a fully-qualified insight resource name string. + * + * @param {string} project + * @param {string} location + * @param {string} insight_type + * @param {string} insight + * @returns {string} Resource name string. + */ + insightPath( + project: string, + location: string, + insightType: string, + insight: string + ) { + return this.pathTemplates.insightPathTemplate.render({ + project: project, + location: location, + insight_type: insightType, + insight: insight, + }); + } + + /** + * Parse the project from Insight resource. + * + * @param {string} insightName + * A fully-qualified path representing Insight resource. + * @returns {string} A string representing the project. + */ + matchProjectFromInsightName(insightName: string) { + return this.pathTemplates.insightPathTemplate.match(insightName).project; + } + + /** + * Parse the location from Insight resource. + * + * @param {string} insightName + * A fully-qualified path representing Insight resource. + * @returns {string} A string representing the location. + */ + matchLocationFromInsightName(insightName: string) { + return this.pathTemplates.insightPathTemplate.match(insightName).location; + } + + /** + * Parse the insight_type from Insight resource. + * + * @param {string} insightName + * A fully-qualified path representing Insight resource. + * @returns {string} A string representing the insight_type. + */ + matchInsightTypeFromInsightName(insightName: string) { + return this.pathTemplates.insightPathTemplate.match(insightName) + .insight_type; + } + + /** + * Parse the insight from Insight resource. + * + * @param {string} insightName + * A fully-qualified path representing Insight resource. + * @returns {string} A string representing the insight. + */ + matchInsightFromInsightName(insightName: string) { + return this.pathTemplates.insightPathTemplate.match(insightName).insight; + } + + /** + * Return a fully-qualified insightType resource name string. + * + * @param {string} project + * @param {string} location + * @param {string} insight_type + * @returns {string} Resource name string. + */ + insightTypePath(project: string, location: string, insightType: string) { + return this.pathTemplates.insightTypePathTemplate.render({ + project: project, + location: location, + insight_type: insightType, + }); + } + + /** + * Parse the project from InsightType resource. + * + * @param {string} insightTypeName + * A fully-qualified path representing InsightType resource. + * @returns {string} A string representing the project. + */ + matchProjectFromInsightTypeName(insightTypeName: string) { + return this.pathTemplates.insightTypePathTemplate.match(insightTypeName) + .project; + } + + /** + * Parse the location from InsightType resource. + * + * @param {string} insightTypeName + * A fully-qualified path representing InsightType resource. + * @returns {string} A string representing the location. + */ + matchLocationFromInsightTypeName(insightTypeName: string) { + return this.pathTemplates.insightTypePathTemplate.match(insightTypeName) + .location; + } + + /** + * Parse the insight_type from InsightType resource. + * + * @param {string} insightTypeName + * A fully-qualified path representing InsightType resource. + * @returns {string} A string representing the insight_type. + */ + matchInsightTypeFromInsightTypeName(insightTypeName: string) { + return this.pathTemplates.insightTypePathTemplate.match(insightTypeName) + .insight_type; + } + /** * Return a fully-qualified recommendation resource name string. * diff --git a/packages/google-cloud-recommender/src/v1/recommender_client_config.json b/packages/google-cloud-recommender/src/v1/recommender_client_config.json index 8cb8a1d116d..ce6027fdf13 100644 --- a/packages/google-cloud-recommender/src/v1/recommender_client_config.json +++ b/packages/google-cloud-recommender/src/v1/recommender_client_config.json @@ -20,6 +20,18 @@ } }, "methods": { + "ListInsights": { + "retry_codes_name": "non_idempotent", + "retry_params_name": "default" + }, + "GetInsight": { + "retry_codes_name": "non_idempotent", + "retry_params_name": "default" + }, + "MarkInsightAccepted": { + "retry_codes_name": "non_idempotent", + "retry_params_name": "default" + }, "ListRecommendations": { "timeout_millis": 60000, "retry_codes_name": "idempotent", diff --git a/packages/google-cloud-recommender/src/v1/recommender_proto_list.json b/packages/google-cloud-recommender/src/v1/recommender_proto_list.json index f1045a2bf13..9492e306033 100644 --- a/packages/google-cloud-recommender/src/v1/recommender_proto_list.json +++ b/packages/google-cloud-recommender/src/v1/recommender_proto_list.json @@ -1,4 +1,5 @@ [ + "../../protos/google/cloud/recommender/v1/insight.proto", "../../protos/google/cloud/recommender/v1/recommendation.proto", "../../protos/google/cloud/recommender/v1/recommender_service.proto" ] diff --git a/packages/google-cloud-recommender/synth.metadata b/packages/google-cloud-recommender/synth.metadata index e495ba29f09..01c6c83cd8a 100644 --- a/packages/google-cloud-recommender/synth.metadata +++ b/packages/google-cloud-recommender/synth.metadata @@ -3,23 +3,15 @@ { "git": { "name": ".", - "remote": "https://github.com/googleapis/nodejs-recommender.git", - "sha": "93654e9fe772bc7a9adbcd8d69ddd731be26810d" - } - }, - { - "git": { - "name": "googleapis", - "remote": "https://github.com/googleapis/googleapis.git", - "sha": "123873dc7e2be35252d172205f67a375e70e9747", - "internalRef": "311581003" + "remote": "git@github.com:googleapis/nodejs-recommender.git", + "sha": "ee4de5b2c7ed3b7b3503b37d041250fb2cf787c5" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "dc9caca650c77b7039e2bbc3339ffb34ae78e5b7" + "sha": "303271797a360f8a439203413f13a160f2f5b3b4" } } ], @@ -29,8 +21,8 @@ "source": "googleapis", "apiName": "recommender", "apiVersion": "v1", - "language": "typescript", - "generator": "gapic-generator-typescript" + "language": "nodejs", + "generator": "bazel" } } ] diff --git a/packages/google-cloud-recommender/synth.py b/packages/google-cloud-recommender/synth.py index 5f4a9e74c39..d0564ce406a 100644 --- a/packages/google-cloud-recommender/synth.py +++ b/packages/google-cloud-recommender/synth.py @@ -25,21 +25,11 @@ # Run the gapic generator -gapic = gcp.GAPICMicrogenerator() +gapic = gcp.GAPICBazel() name = 'recommender' versions = ['v1'] for version in versions: - library = gapic.typescript_library( - name, - version, - proto_path=f'google/cloud/{name}/{version}', - generator_args={ - 'grpc-service-config': f'google/cloud/{name}/{version}/{name}_grpc_service_config.json', - 'package-name': f'@google-cloud/{name}', - 'main-service': 'DataCatalog', # just for webpack.config.js - }, - extra_proto_files=['google/cloud/common_resources.proto'], - ) + library = gapic.node_library(name, version) s.copy(library, excludes=['package.json', 'README.md']) # Copy common templates diff --git a/packages/google-cloud-recommender/test/gapic_recommender_v1.ts b/packages/google-cloud-recommender/test/gapic_recommender_v1.ts index 392b0ee5df4..676b6d9cc76 100644 --- a/packages/google-cloud-recommender/test/gapic_recommender_v1.ts +++ b/packages/google-cloud-recommender/test/gapic_recommender_v1.ts @@ -194,6 +194,232 @@ describe('v1.RecommenderClient', () => { assert.strictEqual(result, fakeProjectId); }); + describe('getInsight', () => { + it('invokes getInsight without error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.GetInsightRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.recommender.v1.Insight() + ); + client.innerApiCalls.getInsight = stubSimpleCall(expectedResponse); + const [response] = await client.getInsight(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getInsight as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + + it('invokes getInsight without error using callback', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.GetInsightRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.recommender.v1.Insight() + ); + client.innerApiCalls.getInsight = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.getInsight( + request, + ( + err?: Error | null, + result?: protos.google.cloud.recommender.v1.IInsight | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.getInsight as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); + + it('invokes getInsight with error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.GetInsightRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.getInsight = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.getInsight(request), expectedError); + assert( + (client.innerApiCalls.getInsight as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + + describe('markInsightAccepted', () => { + it('invokes markInsightAccepted without error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.MarkInsightAcceptedRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.recommender.v1.Insight() + ); + client.innerApiCalls.markInsightAccepted = stubSimpleCall( + expectedResponse + ); + const [response] = await client.markInsightAccepted(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.markInsightAccepted as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + + it('invokes markInsightAccepted without error using callback', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.MarkInsightAcceptedRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = generateSampleMessage( + new protos.google.cloud.recommender.v1.Insight() + ); + client.innerApiCalls.markInsightAccepted = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.markInsightAccepted( + request, + ( + err?: Error | null, + result?: protos.google.cloud.recommender.v1.IInsight | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.markInsightAccepted as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); + + it('invokes markInsightAccepted with error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.MarkInsightAcceptedRequest() + ); + request.name = ''; + const expectedHeaderRequestParams = 'name='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.markInsightAccepted = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.markInsightAccepted(request), expectedError); + assert( + (client.innerApiCalls.markInsightAccepted as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + }); + describe('getRecommendation', () => { it('invokes getRecommendation without error', async () => { const client = new recommenderModule.v1.RecommenderClient({ @@ -657,15 +883,15 @@ describe('v1.RecommenderClient', () => { }); }); - describe('listRecommendations', () => { - it('invokes listRecommendations without error', async () => { + describe('listInsights', () => { + it('invokes listInsights without error', async () => { const client = new recommenderModule.v1.RecommenderClient({ credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); client.initialize(); const request = generateSampleMessage( - new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + new protos.google.cloud.recommender.v1.ListInsightsRequest() ); request.parent = ''; const expectedHeaderRequestParams = 'parent='; @@ -677,36 +903,28 @@ describe('v1.RecommenderClient', () => { }, }; const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), ]; - client.innerApiCalls.listRecommendations = stubSimpleCall( - expectedResponse - ); - const [response] = await client.listRecommendations(request); + client.innerApiCalls.listInsights = stubSimpleCall(expectedResponse); + const [response] = await client.listInsights(request); assert.deepStrictEqual(response, expectedResponse); assert( - (client.innerApiCalls.listRecommendations as SinonStub) + (client.innerApiCalls.listInsights as SinonStub) .getCall(0) .calledWith(request, expectedOptions, undefined) ); }); - it('invokes listRecommendations without error using callback', async () => { + it('invokes listInsights without error using callback', async () => { const client = new recommenderModule.v1.RecommenderClient({ credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); client.initialize(); const request = generateSampleMessage( - new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + new protos.google.cloud.recommender.v1.ListInsightsRequest() ); request.parent = ''; const expectedHeaderRequestParams = 'parent='; @@ -718,25 +936,19 @@ describe('v1.RecommenderClient', () => { }, }; const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), ]; - client.innerApiCalls.listRecommendations = stubSimpleCallWithCallback( + client.innerApiCalls.listInsights = stubSimpleCallWithCallback( expectedResponse ); const promise = new Promise((resolve, reject) => { - client.listRecommendations( + client.listInsights( request, ( err?: Error | null, - result?: protos.google.cloud.recommender.v1.IRecommendation[] | null + result?: protos.google.cloud.recommender.v1.IInsight[] | null ) => { if (err) { reject(err); @@ -749,20 +961,20 @@ describe('v1.RecommenderClient', () => { const response = await promise; assert.deepStrictEqual(response, expectedResponse); assert( - (client.innerApiCalls.listRecommendations as SinonStub) + (client.innerApiCalls.listInsights as SinonStub) .getCall(0) .calledWith(request, expectedOptions /*, callback defined above */) ); }); - it('invokes listRecommendations with error', async () => { + it('invokes listInsights with error', async () => { const client = new recommenderModule.v1.RecommenderClient({ credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); client.initialize(); const request = generateSampleMessage( - new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + new protos.google.cloud.recommender.v1.ListInsightsRequest() ); request.parent = ''; const expectedHeaderRequestParams = 'parent='; @@ -774,49 +986,43 @@ describe('v1.RecommenderClient', () => { }, }; const expectedError = new Error('expected'); - client.innerApiCalls.listRecommendations = stubSimpleCall( + client.innerApiCalls.listInsights = stubSimpleCall( undefined, expectedError ); - await assert.rejects(client.listRecommendations(request), expectedError); + await assert.rejects(client.listInsights(request), expectedError); assert( - (client.innerApiCalls.listRecommendations as SinonStub) + (client.innerApiCalls.listInsights as SinonStub) .getCall(0) .calledWith(request, expectedOptions, undefined) ); }); - it('invokes listRecommendationsStream without error', async () => { + it('invokes listInsightsStream without error', async () => { const client = new recommenderModule.v1.RecommenderClient({ credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); client.initialize(); const request = generateSampleMessage( - new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + new protos.google.cloud.recommender.v1.ListInsightsRequest() ); request.parent = ''; const expectedHeaderRequestParams = 'parent='; const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() - ), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), ]; - client.descriptors.page.listRecommendations.createStream = stubPageStreamingCall( + client.descriptors.page.listInsights.createStream = stubPageStreamingCall( expectedResponse ); - const stream = client.listRecommendationsStream(request); + const stream = client.listInsightsStream(request); const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.recommender.v1.Recommendation[] = []; + const responses: protos.google.cloud.recommender.v1.Insight[] = []; stream.on( 'data', - (response: protos.google.cloud.recommender.v1.Recommendation) => { + (response: protos.google.cloud.recommender.v1.Insight) => { responses.push(response); } ); @@ -830,12 +1036,12 @@ describe('v1.RecommenderClient', () => { const responses = await promise; assert.deepStrictEqual(responses, expectedResponse); assert( - (client.descriptors.page.listRecommendations.createStream as SinonStub) + (client.descriptors.page.listInsights.createStream as SinonStub) .getCall(0) - .calledWith(client.innerApiCalls.listRecommendations, request) + .calledWith(client.innerApiCalls.listInsights, request) ); assert.strictEqual( - (client.descriptors.page.listRecommendations + (client.descriptors.page.listInsights .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ 'x-goog-request-params' ], @@ -843,28 +1049,28 @@ describe('v1.RecommenderClient', () => { ); }); - it('invokes listRecommendationsStream with error', async () => { + it('invokes listInsightsStream with error', async () => { const client = new recommenderModule.v1.RecommenderClient({ credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); client.initialize(); const request = generateSampleMessage( - new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + new protos.google.cloud.recommender.v1.ListInsightsRequest() ); request.parent = ''; const expectedHeaderRequestParams = 'parent='; const expectedError = new Error('expected'); - client.descriptors.page.listRecommendations.createStream = stubPageStreamingCall( + client.descriptors.page.listInsights.createStream = stubPageStreamingCall( undefined, expectedError ); - const stream = client.listRecommendationsStream(request); + const stream = client.listInsightsStream(request); const promise = new Promise((resolve, reject) => { - const responses: protos.google.cloud.recommender.v1.Recommendation[] = []; + const responses: protos.google.cloud.recommender.v1.Insight[] = []; stream.on( 'data', - (response: protos.google.cloud.recommender.v1.Recommendation) => { + (response: protos.google.cloud.recommender.v1.Insight) => { responses.push(response); } ); @@ -877,12 +1083,12 @@ describe('v1.RecommenderClient', () => { }); await assert.rejects(promise, expectedError); assert( - (client.descriptors.page.listRecommendations.createStream as SinonStub) + (client.descriptors.page.listInsights.createStream as SinonStub) .getCall(0) - .calledWith(client.innerApiCalls.listRecommendations, request) + .calledWith(client.innerApiCalls.listInsights, request) ); assert.strictEqual( - (client.descriptors.page.listRecommendations + (client.descriptors.page.listInsights .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ 'x-goog-request-params' ], @@ -890,20 +1096,330 @@ describe('v1.RecommenderClient', () => { ); }); - it('uses async iteration with listRecommendations without error', async () => { + it('uses async iteration with listInsights without error', async () => { const client = new recommenderModule.v1.RecommenderClient({ credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); client.initialize(); const request = generateSampleMessage( - new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + new protos.google.cloud.recommender.v1.ListInsightsRequest() ); request.parent = ''; const expectedHeaderRequestParams = 'parent='; const expectedResponse = [ - generateSampleMessage( - new protos.google.cloud.recommender.v1.Recommendation() + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + generateSampleMessage(new protos.google.cloud.recommender.v1.Insight()), + ]; + client.descriptors.page.listInsights.asyncIterate = stubAsyncIterationCall( + expectedResponse + ); + const responses: protos.google.cloud.recommender.v1.IInsight[] = []; + const iterable = client.listInsightsAsync(request); + for await (const resource of iterable) { + responses.push(resource!); + } + assert.deepStrictEqual(responses, expectedResponse); + assert.deepStrictEqual( + (client.descriptors.page.listInsights + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listInsights + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + + it('uses async iteration with listInsights with error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.ListInsightsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listInsights.asyncIterate = stubAsyncIterationCall( + undefined, + expectedError + ); + const iterable = client.listInsightsAsync(request); + await assert.rejects(async () => { + const responses: protos.google.cloud.recommender.v1.IInsight[] = []; + for await (const resource of iterable) { + responses.push(resource!); + } + }); + assert.deepStrictEqual( + (client.descriptors.page.listInsights + .asyncIterate as SinonStub).getCall(0).args[1], + request + ); + assert.strictEqual( + (client.descriptors.page.listInsights + .asyncIterate as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + }); + + describe('listRecommendations', () => { + it('invokes listRecommendations without error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + ]; + client.innerApiCalls.listRecommendations = stubSimpleCall( + expectedResponse + ); + const [response] = await client.listRecommendations(request); + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listRecommendations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + + it('invokes listRecommendations without error using callback', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + ]; + client.innerApiCalls.listRecommendations = stubSimpleCallWithCallback( + expectedResponse + ); + const promise = new Promise((resolve, reject) => { + client.listRecommendations( + request, + ( + err?: Error | null, + result?: protos.google.cloud.recommender.v1.IRecommendation[] | null + ) => { + if (err) { + reject(err); + } else { + resolve(result); + } + } + ); + }); + const response = await promise; + assert.deepStrictEqual(response, expectedResponse); + assert( + (client.innerApiCalls.listRecommendations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions /*, callback defined above */) + ); + }); + + it('invokes listRecommendations with error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedOptions = { + otherArgs: { + headers: { + 'x-goog-request-params': expectedHeaderRequestParams, + }, + }, + }; + const expectedError = new Error('expected'); + client.innerApiCalls.listRecommendations = stubSimpleCall( + undefined, + expectedError + ); + await assert.rejects(client.listRecommendations(request), expectedError); + assert( + (client.innerApiCalls.listRecommendations as SinonStub) + .getCall(0) + .calledWith(request, expectedOptions, undefined) + ); + }); + + it('invokes listRecommendationsStream without error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() + ), + ]; + client.descriptors.page.listRecommendations.createStream = stubPageStreamingCall( + expectedResponse + ); + const stream = client.listRecommendationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.recommender.v1.Recommendation[] = []; + stream.on( + 'data', + (response: protos.google.cloud.recommender.v1.Recommendation) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + const responses = await promise; + assert.deepStrictEqual(responses, expectedResponse); + assert( + (client.descriptors.page.listRecommendations.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listRecommendations, request) + ); + assert.strictEqual( + (client.descriptors.page.listRecommendations + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + + it('invokes listRecommendationsStream with error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedError = new Error('expected'); + client.descriptors.page.listRecommendations.createStream = stubPageStreamingCall( + undefined, + expectedError + ); + const stream = client.listRecommendationsStream(request); + const promise = new Promise((resolve, reject) => { + const responses: protos.google.cloud.recommender.v1.Recommendation[] = []; + stream.on( + 'data', + (response: protos.google.cloud.recommender.v1.Recommendation) => { + responses.push(response); + } + ); + stream.on('end', () => { + resolve(responses); + }); + stream.on('error', (err: Error) => { + reject(err); + }); + }); + await assert.rejects(promise, expectedError); + assert( + (client.descriptors.page.listRecommendations.createStream as SinonStub) + .getCall(0) + .calledWith(client.innerApiCalls.listRecommendations, request) + ); + assert.strictEqual( + (client.descriptors.page.listRecommendations + .createStream as SinonStub).getCall(0).args[2].otherArgs.headers[ + 'x-goog-request-params' + ], + expectedHeaderRequestParams + ); + }); + + it('uses async iteration with listRecommendations without error', async () => { + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + const request = generateSampleMessage( + new protos.google.cloud.recommender.v1.ListRecommendationsRequest() + ); + request.parent = ''; + const expectedHeaderRequestParams = 'parent='; + const expectedResponse = [ + generateSampleMessage( + new protos.google.cloud.recommender.v1.Recommendation() ), generateSampleMessage( new protos.google.cloud.recommender.v1.Recommendation() @@ -974,6 +1490,146 @@ describe('v1.RecommenderClient', () => { }); describe('Path templates', () => { + describe('insight', () => { + const fakePath = '/rendered/path/insight'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + insight_type: 'insightTypeValue', + insight: 'insightValue', + }; + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.insightPathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.insightPathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('insightPath', () => { + const result = client.insightPath( + 'projectValue', + 'locationValue', + 'insightTypeValue', + 'insightValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.insightPathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromInsightName', () => { + const result = client.matchProjectFromInsightName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.insightPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromInsightName', () => { + const result = client.matchLocationFromInsightName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.insightPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchInsightTypeFromInsightName', () => { + const result = client.matchInsightTypeFromInsightName(fakePath); + assert.strictEqual(result, 'insightTypeValue'); + assert( + (client.pathTemplates.insightPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchInsightFromInsightName', () => { + const result = client.matchInsightFromInsightName(fakePath); + assert.strictEqual(result, 'insightValue'); + assert( + (client.pathTemplates.insightPathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); + + describe('insightType', () => { + const fakePath = '/rendered/path/insightType'; + const expectedParameters = { + project: 'projectValue', + location: 'locationValue', + insight_type: 'insightTypeValue', + }; + const client = new recommenderModule.v1.RecommenderClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.initialize(); + client.pathTemplates.insightTypePathTemplate.render = sinon + .stub() + .returns(fakePath); + client.pathTemplates.insightTypePathTemplate.match = sinon + .stub() + .returns(expectedParameters); + + it('insightTypePath', () => { + const result = client.insightTypePath( + 'projectValue', + 'locationValue', + 'insightTypeValue' + ); + assert.strictEqual(result, fakePath); + assert( + (client.pathTemplates.insightTypePathTemplate.render as SinonStub) + .getCall(-1) + .calledWith(expectedParameters) + ); + }); + + it('matchProjectFromInsightTypeName', () => { + const result = client.matchProjectFromInsightTypeName(fakePath); + assert.strictEqual(result, 'projectValue'); + assert( + (client.pathTemplates.insightTypePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchLocationFromInsightTypeName', () => { + const result = client.matchLocationFromInsightTypeName(fakePath); + assert.strictEqual(result, 'locationValue'); + assert( + (client.pathTemplates.insightTypePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + + it('matchInsightTypeFromInsightTypeName', () => { + const result = client.matchInsightTypeFromInsightTypeName(fakePath); + assert.strictEqual(result, 'insightTypeValue'); + assert( + (client.pathTemplates.insightTypePathTemplate.match as SinonStub) + .getCall(-1) + .calledWith(fakePath) + ); + }); + }); + describe('recommendation', () => { const fakePath = '/rendered/path/recommendation'; const expectedParameters = { diff --git a/packages/google-cloud-recommender/webpack.config.js b/packages/google-cloud-recommender/webpack.config.js index 40a80f89007..09bd9240c8a 100644 --- a/packages/google-cloud-recommender/webpack.config.js +++ b/packages/google-cloud-recommender/webpack.config.js @@ -17,8 +17,8 @@ const path = require('path'); module.exports = { entry: './src/index.ts', output: { - library: 'DataCatalog', - filename: './data-catalog.js', + library: 'Recommender', + filename: './recommender.js', }, node: { child_process: 'empty',