// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// 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.networkconnectivity.v1beta;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/field_info.proto";
import "google/api/resource.proto";
import "google/cloud/networkconnectivity/v1beta/common.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Cloud.NetworkConnectivity.V1Beta";
option go_package = "cloud.google.com/go/networkconnectivity/apiv1beta/networkconnectivitypb;networkconnectivitypb";
option java_multiple_files = true;
option java_outer_classname = "TransportManagerProto";
option java_package = "com.google.cloud.networkconnectivity.v1beta";
option php_namespace = "Google\\Cloud\\NetworkConnectivity\\V1beta";
option ruby_package = "Google::Cloud::NetworkConnectivity::V1beta";

// The CLH based service for managing RemoteTransportProfiles and Transports.
service TransportManager {
  option (google.api.default_host) = "networkconnectivity.googleapis.com";
  option (google.api.oauth_scopes) =
      "https://www.googleapis.com/auth/cloud-platform";

  // Lists RemoteTransportProfiles in a given project and location.
  rpc ListRemoteTransportProfiles(ListRemoteTransportProfilesRequest)
      returns (ListRemoteTransportProfilesResponse) {
    option (google.api.http) = {
      get: "/v1beta/{parent=projects/*/locations/*}/remoteTransportProfiles"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single RemoteTransportProfile.
  rpc GetRemoteTransportProfile(GetRemoteTransportProfileRequest)
      returns (RemoteTransportProfile) {
    option (google.api.http) = {
      get: "/v1beta/{name=projects/*/locations/*/remoteTransportProfiles/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Lists Transports in a given project and location.
  rpc ListTransports(ListTransportsRequest) returns (ListTransportsResponse) {
    option (google.api.http) = {
      get: "/v1beta/{parent=projects/*/locations/*}/transports"
    };
    option (google.api.method_signature) = "parent";
  }

  // Gets details of a single Transport.
  rpc GetTransport(GetTransportRequest) returns (Transport) {
    option (google.api.http) = {
      get: "/v1beta/{name=projects/*/locations/*/transports/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Gets the operational status of a single Transport.
  rpc GetStatus(GetStatusRequest) returns (GetStatusResponse) {
    option (google.api.http) = {
      get: "/v1beta/{name=projects/*/locations/*/transports/*}:getStatus"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a new Transport in a given project and location.
  rpc CreateTransport(CreateTransportRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1beta/{parent=projects/*/locations/*}/transports"
      body: "transport"
    };
    option (google.api.method_signature) = "parent,transport,transport_id";
    option (google.longrunning.operation_info) = {
      response_type: "Transport"
      metadata_type: "OperationMetadata"
    };
  }

  // Updates the parameters of a single Transport.
  rpc UpdateTransport(UpdateTransportRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      patch: "/v1beta/{transport.name=projects/*/locations/*/transports/*}"
      body: "transport"
    };
    option (google.api.method_signature) = "transport,update_mask";
    option (google.longrunning.operation_info) = {
      response_type: "Transport"
      metadata_type: "OperationMetadata"
    };
  }

  // Deletes a single Transport.
  rpc DeleteTransport(DeleteTransportRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1beta/{name=projects/*/locations/*/transports/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }
}

// Message describing RemoteTransportProfile object.
message RemoteTransportProfile {
  option (google.api.resource) = {
    type: "networkconnectivity.googleapis.com/RemoteTransportProfile"
    pattern: "projects/{project}/locations/{location}/remoteTransportProfiles/{remote_transport_profile}"
    plural: "remoteTransportProfiles"
    singular: "remoteTransportProfile"
  };

  // Bandwidth values that may be supported for a specific profile.
  enum Bandwidth {
    // Unspecified bandwidth.
    BANDWIDTH_UNSPECIFIED = 0;

    // 50 Megabits per second.
    BPS_50M = 1;

    // 100 Megabits per second.
    BPS_100M = 2;

    // 200 Megabits per second.
    BPS_200M = 3;

    // 300 Megabits per second.
    BPS_300M = 4;

    // 400 Megabits per second.
    BPS_400M = 5;

    // 500 Megabits per second.
    BPS_500M = 6;

    // 1 Gigabit per second.
    BPS_1G = 7;

    // 2 Gigabits per second.
    BPS_2G = 8;

    // 5 Gigabits per second.
    BPS_5G = 9;

    // 10 Gigabits per second.
    BPS_10G = 10;

    // 20 Gigabits per second.
    BPS_20G = 11;

    // 50 Gigabits per second.
    BPS_50G = 12;

    // 100 Gigabits per second.
    BPS_100G = 13;
  }

  // Availability class options.
  enum ServiceLevelAvailability {
    // Unspecified service level availability.
    SERVICE_LEVEL_AVAILABILITY_UNSPECIFIED = 0;

    // This represents a 99.9% service level on the availability of the
    // configured connectivity.
    HIGH = 1;

    // This represents a 99.99% service level on the availability of the
    // configured connectivity.
    MAXIMUM = 2;
  }

  // Type of provisioning flows supported.
  enum KeyProvisioningFlow {
    // Unspecified key provisioning flow.
    KEY_PROVISIONING_FLOW_UNSPECIFIED = 0;

    // The activationKey field on the Transport must be included in a create or
    // patch request to establish connectivity.
    INPUT_ONLY = 1;

    // The generatedActivationKey field is populated and must be read from the
    // resource and passed into the other provider.
    OUTPUT_ONLY = 2;

    // Both activation key fields are allowed for establishing connectivity. If
    // a key is input, the generated key is still present after provisioning is
    // finished.
    INPUT_OR_OUTPUT = 3;
  }

  // State of the RemoteTransportProfile.
  enum State {
    // Unspecified state.
    STATE_UNSPECIFIED = 0;

    // Not enough capacity for customers to order.
    CLOSED = 1;

    // Enough capacity to fulfill an order.
    OPEN = 2;
  }

  // Identifier. Name of the resource in the format of $provider-$site.
  string name = 1 [(google.api.field_behavior) = IDENTIFIER];

  // Output only. Labels as key value pairs.
  map<string, string> labels = 4 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Description of the profile.
  string description = 6 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Name of the provider on the other end of this profile. E.g.
  // “Amazon Web Services” or “Microsoft Azure”.
  string provider = 7 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. If the profile is a Cloud Service Provider with compute
  // resources, this is populated with the region where connectivity is being
  // established. If the profile provides facility-level selection, this is an
  // identity of the facility any connections on this profile are going through.
  string provider_site = 8 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. List of bandwidth enum values that are supported by this
  // profile.
  repeated Bandwidth supported_bandwidths = 9
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Availability class that will be configured for this
  // particular RemoteTransportProfile.
  ServiceLevelAvailability sla = 10 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Type of provisioning flows supported by this profile.
  KeyProvisioningFlow flow = 11 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Order state for this profile.
  State order_state = 12 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Human readable name of this profile, used to identify this
  // profile in the UI.
  string display_name = 13 [(google.api.field_behavior) = OUTPUT_ONLY];
}

// Message for requesting list of RemoteTransportProfiles.
message ListRemoteTransportProfilesRequest {
  // Required. Parent value for ListRemoteTransportProfilesRequest.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "networkconnectivity.googleapis.com/RemoteTransportProfile"
    }
  ];

  // Optional. Requested page size. Server may return fewer items than
  // requested. If unspecified, server will pick an appropriate default.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Filtering results.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Hint for how to order the results.
  string order_by = 5 [(google.api.field_behavior) = OPTIONAL];
}

// Message for response to listing RemoteTransportProfiles
message ListRemoteTransportProfilesResponse {
  // The list of RemoteTransportProfiles.
  repeated RemoteTransportProfile remote_transport_profiles = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;

  // Unordered list. Locations that could not be reached.
  repeated string unreachable = 3
      [(google.api.field_behavior) = UNORDERED_LIST];
}

// Message for getting a RemoteTransportProfile.
message GetRemoteTransportProfileRequest {
  // Required. Name of the resource.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "networkconnectivity.googleapis.com/RemoteTransportProfile"
    }
  ];
}

// Message describing Transport object.
message Transport {
  option (google.api.resource) = {
    type: "networkconnectivity.googleapis.com/Transport"
    pattern: "projects/{project}/locations/{location}/transports/{transport}"
    plural: "transports"
    singular: "transport"
  };

  // Supported bandwidth options.
  enum Bandwidth {
    // Unspecified bandwidth.
    BANDWIDTH_UNSPECIFIED = 0;

    // 50 Megabits per second.
    BPS_50M = 1;

    // 100 Megabits per second.
    BPS_100M = 2;

    // 200 Megabits per second.
    BPS_200M = 3;

    // 300 Megabits per second.
    BPS_300M = 4;

    // 400 Megabits per second.
    BPS_400M = 5;

    // 500 Megabits per second.
    BPS_500M = 6;

    // 1 Gigabit per second.
    BPS_1G = 7;

    // 2 Gigabits per second.
    BPS_2G = 8;

    // 5 Gigabits per second.
    BPS_5G = 9;

    // 10 Gigabits per second.
    BPS_10G = 10;

    // 20 Gigabits per second.
    BPS_20G = 11;

    // 50 Gigabits per second.
    BPS_50G = 12;

    // 100 Gigabits per second.
    BPS_100G = 13;
  }

  // IP version stack for the established connectivity.
  enum StackType {
    // Unspecified stack type.
    STACK_TYPE_UNSPECIFIED = 0;

    // Only IPv4 is supported. (default)
    IPV4_ONLY = 1;

    // Both IPv4 and IPv6 are supported.
    IPV4_IPV6 = 2;
  }

  // Represents the status of the underlying connectivity. One of
  // the following states, depending on who has initiated the Transport request.
  enum State {
    // Unspecified state.
    STATE_UNSPECIFIED = 0;

    // The resource exists locally and is being created / associated with the
    // resource on the remote provider’s end of the underlying connectivity.
    CREATING = 1;

    // The Transport exists on both sides of the connection, and is waiting for
    // configuration to finalize and be verified as operational.
    PENDING_CONFIG = 2;

    // The Transport was created in GCP. Depending on the profile’s key
    // provisioning flow, this is either waiting for an activation key to be
    // input (the key will be validated that it uses remote resources that match
    // the Transport), or for the generated key to be input to the provider for
    // finalizing. The configured bandwidth is not yet guaranteed.
    PENDING_KEY = 3;

    // The Transport is configured and the underlying connectivity is considered
    // operational.
    ACTIVE = 4;

    // The Transport is being deleted from GCP. The underlying connectivity is
    // no longer operational.
    DELETING = 5;

    // The Transport was deleted on the remote provider's end and is no longer
    // operational. GCP has insufficient information to move the resource back
    // to PENDING_KEY state.
    DEPROVISIONED = 6;
  }

  // Identifier. Name of the resource.
  string name = 1 [(google.api.field_behavior) = IDENTIFIER];

  // Output only. Create time stamp.
  google.protobuf.Timestamp create_time = 2
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Update time stamp.
  google.protobuf.Timestamp update_time = 3
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. Labels as key value pairs.
  map<string, string> labels = 4 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Description of the Transport.
  string description = 6 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Name of the remoteTransportProfile that this Transport is
  // connecting to.
  string remote_profile = 7 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.resource_reference) = {
      type: "networkconnectivity.googleapis.com/RemoteTransportProfile"
    }
  ];

  // Optional. Key used for establishing a connection with the remote transport.
  // This key can only be provided if the profile supports an INPUT key flow and
  // the resource is in the PENDING_KEY state.
  string provided_activation_key = 8 [(google.api.field_behavior) = OPTIONAL];

  // Output only. Google-generated activation key. This is only output if the
  // selected profile supports an OUTPUT key flow. Inputting this to the
  // provider is only valid while the resource is in a PENDING_KEY state. Once
  // the provider has accepted the key, the resource will move to the
  // CONFIGURING state.
  string generated_activation_key = 9
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. Bandwidth of the Transport. This must be one of the supported
  // bandwidths for the remote profile, and must be set when no activation key
  // is being provided.
  Bandwidth bandwidth = 10 [(google.api.field_behavior) = OPTIONAL];

  // Optional. IP version stack for the established connectivity.
  StackType stack_type = 11 [(google.api.field_behavior) = OPTIONAL];

  // Output only. State of the underlying connectivity.
  State state = 12 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The maximum transmission unit (MTU) of a packet that can be
  // sent over this transport.
  int32 mtu_limit = 13 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. Administrative state of the underlying connectivity. If set to
  // true (default), connectivity should be available between your environments.
  // If set to false, the connectivity over these links is disabled. Disabling
  // your Transport does not affect billing, and retains the underlying network
  // bandwidth associated with the connectivity.
  bool admin_enabled = 14 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Resource URI of the Network that will be peered with this
  // Transport. This field must be provided during resource creation and cannot
  // be changed.
  string network = 15 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.resource_reference) = { type: "compute.googleapis.com/Network" }
  ];

  // Optional. List of IP Prefixes that will be advertised to the remote
  // provider. Both IPv4 and IPv6 addresses are supported.
  repeated string advertised_routes = 16
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. The user supplied account id for the CSP associated with the
  // remote profile.
  string remote_account_id = 17 [(google.api.field_behavior) = OPTIONAL];

  // Output only. VPC Network URI that was created for the VPC Peering
  // connection to the provided `network`. If VPC Peering is disconnected, this
  // can be used to re-establish.
  string peering_network = 18 [(google.api.field_behavior) = OUTPUT_ONLY];
}

// Message for requesting list of Transports.
message ListTransportsRequest {
  // Required. Parent value for ListTransportsRequest.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "networkconnectivity.googleapis.com/Transport"
    }
  ];

  // Optional. Requested page size. Server may return fewer items than
  // requested. If unspecified, server will pick an appropriate default.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A token identifying a page of results the server should return.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Filtering results.
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Hint for how to order the results.
  string order_by = 5 [(google.api.field_behavior) = OPTIONAL];
}

// Message for response to listing Transports.
message ListTransportsResponse {
  // The list of Transport.
  repeated Transport transports = 1;

  // A token identifying a page of results the server should return.
  string next_page_token = 2;

  // Unordered list. Locations that could not be reached.
  repeated string unreachable = 3
      [(google.api.field_behavior) = UNORDERED_LIST];
}

// Message for getting a Transport.
message GetTransportRequest {
  // Required. Name of the resource.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "networkconnectivity.googleapis.com/Transport"
    }
  ];
}

// Message for getting a Transport's operational status.
message GetStatusRequest {
  // Required. Name of the resource.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "networkconnectivity.googleapis.com/Transport"
    }
  ];
}

// Message for the response to getting a Transport's operational status.
message GetStatusResponse {
  // The overall status of the Transport.
  enum OverallStatus {
    // Unspecified status.
    OVERALL_STATUS_UNSPECIFIED = 0;

    // Resource is active and operational.
    ACTIVE = 1;

    // Resource is waiting for an activation key to be exchanged.
    PENDING_KEY = 2;

    // Activation keys have been exchanged and connectivity is being
    // established.
    CONFIGURING = 3;

    // VPC Peering has been taken down, or the NCC Spoke has been rejected.
    DISCONNECTED = 4;

    // User configuration is correct, but the configured capacity is
    // operationally down.
    DOWN = 5;
  }

  // The operational status of the underlying networking components.
  enum OperationalStatus {
    // Unspecified status.
    OPERATIONAL_STATUS_UNSPECIFIED = 0;

    // Protected capacity is available and networking components show as up.
    OPERATIONAL_STATUS_ACTIVE = 1;

    // Protected capacity is showing as operationally down.
    OPERATIONAL_STATUS_DOWN = 2;
  }

  // Current status of connectivity to the local GCP resource. This reflects
  // whether the VPC Peering or NCC Hub appears correctly configured.
  enum ConnectivityStatus {
    // Unspecified status.
    CONNECTIVITY_STATUS_UNSPECIFIED = 0;

    // VPC Peering or the NCC Hub appear to be correctly established.
    CONNECTIVITY_STATUS_CONNECTED = 1;

    // VPC Peering has been taken down, or the NCC Spoke has been rejected.
    CONNECTIVITY_STATUS_DISCONNECTED = 2;
  }

  // Current status of MACSec on the underlying network connectivity between GC
  // and the partner.
  enum MacSecStatus {
    // Unspecified status.
    MAC_SEC_STATUS_UNSPECIFIED = 0;

    // MACSec is protecting the links and configured in fail closed.
    MAC_SEC_STATUS_ACTIVE_FAIL_CLOSED = 1;

    // MACSec is protecting the links and configured to fail open on at least
    // one of the redundant links.
    MAC_SEC_STATUS_ACTIVE_FAIL_OPEN = 2;

    // MACSec is not configured on at least one of the underlying links.
    MAC_SEC_STATUS_NOT_CONFIGURED = 3;
  }

  // The overall status of the Transport. This field will always output the most
  // critical status of the Transport. For example, if the connectivity is
  // DISCONNECTED, and the underlying networking components are DOWN, then
  // the overall status will be DOWN.
  OverallStatus overall_status = 1;

  // The operational status of the underlying networking components.
  OperationalStatus operational_status = 2;

  // Current status of connectivity to the local GCP resource. This reflects
  // whether the VPC Peering or NCC Hub appears correctly configured.
  ConnectivityStatus connectivity_status = 3;

  // Current status of MACSec on the underlying network connectivity between GC
  // and the partner.
  MacSecStatus mac_sec_status = 4;
}

// Message for creating a Transport
message CreateTransportRequest {
  // Required. Value for parent.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "networkconnectivity.googleapis.com/Transport"
    }
  ];

  // Required. Id of the requesting object
  string transport_id = 2 [(google.api.field_behavior) = REQUIRED];

  // Required. The resource being created
  Transport transport = 3 [(google.api.field_behavior) = REQUIRED];

  // Optional. An optional request ID to identify requests. Specify a unique
  // request ID so that if you must retry your request, the server will know to
  // ignore the request if it has already been completed. The server will
  // guarantee that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request
  // ID, the server can check if original operation with the same request ID
  // was received, and if so, will ignore the second request. This prevents
  // clients from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 4 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// Message for updating a Transport.
message UpdateTransportRequest {
  // Optional. Field mask is used to specify the fields to be overwritten in the
  // Transport resource by the update.
  // The fields specified in the update_mask are relative to the resource, not
  // the full request. A field will be overwritten if it is in the mask. If the
  // user does not provide a mask then all fields present in the request will be
  // overwritten.
  google.protobuf.FieldMask update_mask = 1
      [(google.api.field_behavior) = OPTIONAL];

  // Required. The resource being updated.
  Transport transport = 2 [(google.api.field_behavior) = REQUIRED];

  // Optional. An optional request ID to identify requests. Specify a unique
  // request ID so that if you must retry your request, the server will know to
  // ignore the request if it has already been completed. The server will
  // guarantee that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request
  // ID, the server can check if original operation with the same request ID
  // was received, and if so, will ignore the second request. This prevents
  // clients from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 3 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}

// Message for deleting a Transport.
message DeleteTransportRequest {
  // Required. Name of the resource.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "networkconnectivity.googleapis.com/Transport"
    }
  ];

  // Optional. An optional request ID to identify requests. Specify a unique
  // request ID so that if you must retry your request, the server will know to
  // ignore the request if it has already been completed. The server will
  // guarantee that for at least 60 minutes after the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request
  // ID, the server can check if original operation with the same request ID
  // was received, and if so, will ignore the second request. This prevents
  // clients from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported (00000000-0000-0000-0000-000000000000).
  string request_id = 2 [
    (google.api.field_info).format = UUID4,
    (google.api.field_behavior) = OPTIONAL
  ];
}
