// Copyright 2017 Google Inc.
//
// 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.api;

import "google/api/annotations.proto";
import "google/api/auth.proto";
import "google/api/backend.proto";
import "google/api/context.proto";
import "google/api/control.proto";
import "google/api/documentation.proto";
import "google/api/endpoint.proto";
import "google/api/experimental/experimental.proto";
import "google/api/http.proto";
import "google/api/label.proto";
import "google/api/log.proto";
import "google/api/logging.proto";
import "google/api/metric.proto";
import "google/api/monitored_resource.proto";
import "google/api/monitoring.proto";
import "google/api/quota.proto";
import "google/api/source_info.proto";
import "google/api/system_parameter.proto";
import "google/api/usage.proto";
import "google/protobuf/any.proto";
import "google/protobuf/api.proto";
import "google/protobuf/type.proto";
import "google/protobuf/wrappers.proto";

option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
option java_multiple_files = true;
option java_outer_classname = "ServiceProto";
option java_package = "com.google.api";
option objc_class_prefix = "GAPI";


// `Service` is the root object of Google service configuration schema. It
// describes basic information about a service, such as the name and the
// title, and delegates other aspects to sub-sections. Each sub-section is
// either a proto message or a repeated proto message that configures a
// specific aspect, such as auth. See each proto message definition for details.
//
// Example:
//
//     type: google.api.Service
//     config_version: 3
//     name: calendar.googleapis.com
//     title: Google Calendar API
//     apis:
//     - name: google.calendar.v3.Calendar
//     authentication:
//       providers:
//       - id: google_calendar_auth
//         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
//         issuer: https://securetoken.google.com
//       rules:
//       - selector: "*"
//         requirements:
//           provider_id: google_calendar_auth
message Service {
  // The version of the service configuration. The config version may
  // influence interpretation of the configuration, for example, to
  // determine defaults. This is documented together with applicable
  // options. The current default for the config version itself is `3`.
  google.protobuf.UInt32Value config_version = 20;

  // The DNS address at which this service is available,
  // e.g. `calendar.googleapis.com`.
  string name = 1;

  // A unique ID for a specific instance of this message, typically assigned
  // by the client for tracking purpose. If empty, the server may choose to
  // generate one instead.
  string id = 33;

  // The product title associated with this service.
  string title = 2;

  // The id of the Google developer project that owns the service.
  // Members of this project can manage the service configuration,
  // manage consumption of the service, etc.
  string producer_project_id = 22;

  // A list of API interfaces exported by this service. Only the `name` field
  // of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
  // author, as the remaining fields will be derived from the IDL during the
  // normalization process. It is an error to specify an API interface here
  // which cannot be resolved against the associated IDL files.
  repeated google.protobuf.Api apis = 3;

  // A list of all proto message types included in this API service.
  // Types referenced directly or indirectly by the `apis` are
  // automatically included.  Messages which are not referenced but
  // shall be included, such as types used by the `google.protobuf.Any` type,
  // should be listed here by name. Example:
  //
  //     types:
  //     - name: google.protobuf.Int32
  repeated google.protobuf.Type types = 4;

  // A list of all enum types included in this API service.  Enums
  // referenced directly or indirectly by the `apis` are automatically
  // included.  Enums which are not referenced but shall be included
  // should be listed here by name. Example:
  //
  //     enums:
  //     - name: google.someapi.v1.SomeEnum
  repeated google.protobuf.Enum enums = 5;

  // Additional API documentation.
  Documentation documentation = 6;

  // API backend configuration.
  Backend backend = 8;

  // HTTP configuration.
  Http http = 9;

  // Quota configuration.
  Quota quota = 10;

  // Auth configuration.
  Authentication authentication = 11;

  // Context configuration.
  Context context = 12;

  // Configuration controlling usage of this service.
  Usage usage = 15;

  // Configuration for network endpoints.  If this is empty, then an endpoint
  // with the same name as the service is automatically generated to service all
  // defined APIs.
  repeated Endpoint endpoints = 18;

  // Configuration for the service control plane.
  Control control = 21;

  // Defines the logs used by this service.
  repeated LogDescriptor logs = 23;

  // Defines the metrics used by this service.
  repeated MetricDescriptor metrics = 24;

  // Defines the monitored resources used by this service. This is required
  // by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
  repeated MonitoredResourceDescriptor monitored_resources = 25;

  // Logging configuration.
  Logging logging = 27;

  // Monitoring configuration.
  Monitoring monitoring = 28;

  // System parameter configuration.
  SystemParameters system_parameters = 29;

  // Output only. The source information for this configuration if available.
  SourceInfo source_info = 37;

  // Experimental configuration.
  Experimental experimental = 101;
}
