// Copyright 2016 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.golang.org/genproto/googleapis/api/serviceconfig/annotations.proto"; // from google/api/annotations.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/auth.proto"; // from google/api/auth.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/backend.proto"; // from google/api/backend.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/context.proto"; // from google/api/context.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/control.proto"; // from google/api/control.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/documentation.proto"; // from google/api/documentation.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.proto"; // from google/api/endpoint.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/http.proto"; // from google/api/http.proto
import "google.golang.org/genproto/googleapis/api/label/label.proto"; // from google/api/label.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/log.proto"; // from google/api/log.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/logging.proto"; // from google/api/logging.proto
import "google.golang.org/genproto/googleapis/api/metric/metric.proto"; // from google/api/metric.proto
import "google.golang.org/genproto/googleapis/api/monitoredres/monitored_resource.proto"; // from google/api/monitored_resource.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.proto"; // from google/api/monitoring.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.proto"; // from google/api/system_parameter.proto
import "google.golang.org/genproto/googleapis/api/serviceconfig/usage.proto"; // from google/api/usage.proto
import "github.com/golang/protobuf/ptypes/any/any.proto"; // from google/protobuf/any.proto
import "google.golang.org/genproto/protobuf/api.proto"; // from google/protobuf/api.proto
import "google.golang.org/genproto/protobuf/type.proto"; // from google/protobuf/type.proto
import "github.com/golang/protobuf/ptypes/wrappers/wrappers.proto"; // from google/protobuf/wrappers.proto

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 the configuration schema. It
// describes basic information like the name of the service and the
// exposed API interfaces, and delegates other aspects to configuration
// sub-sections.
//
// Example:
//
//     type: google.api.Service
//     config_version: 1
//     name: calendar.googleapis.com
//     title: Google Calendar API
//     apis:
//     - name: google.calendar.Calendar
//     backend:
//       rules:
//       - selector: "*"
//         address: calendar.example.com
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;

  // 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 of the service.
  Logging logging = 27;

  // Monitoring configuration of the service.
  Monitoring monitoring = 28;

  // Configuration for system parameters.
  SystemParameters system_parameters = 29;
}
