"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import builtins
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.message
import google.protobuf.source_context_pb2
import google.protobuf.type_pb2
import typing
import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor = ...

# Api is a light-weight descriptor for an API Interface.
#
# Interfaces are also described as "protocol buffer services" in some contexts,
# such as by the "service" keyword in a .proto file, but they are different
# from API Services, which represent a concrete implementation of an interface
# as opposed to simply a description of methods and bindings. They are also
# sometimes simply referred to as "APIs" in other contexts, such as the name of
# this message itself. See https://cloud.google.com/apis/design/glossary for
# detailed terminology.
class Api(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
    NAME_FIELD_NUMBER: builtins.int
    METHODS_FIELD_NUMBER: builtins.int
    OPTIONS_FIELD_NUMBER: builtins.int
    VERSION_FIELD_NUMBER: builtins.int
    SOURCE_CONTEXT_FIELD_NUMBER: builtins.int
    MIXINS_FIELD_NUMBER: builtins.int
    SYNTAX_FIELD_NUMBER: builtins.int
    # The fully qualified name of this interface, including package name
    # followed by the interface's simple name.
    name: typing.Text = ...
    # The methods of this interface, in unspecified order.
    @property
    def methods(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Method]: ...
    # Any metadata attached to the interface.
    @property
    def options(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[google.protobuf.type_pb2.Option]: ...
    # A version string for this interface. If specified, must have the form
    # `major-version.minor-version`, as in `1.10`. If the minor version is
    # omitted, it defaults to zero. If the entire version field is empty, the
    # major version is derived from the package name, as outlined below. If the
    # field is not empty, the version in the package name will be verified to be
    # consistent with what is provided here.
    #
    # The versioning schema uses [semantic
    # versioning](http://semver.org) where the major version number
    # indicates a breaking change and the minor version an additive,
    # non-breaking change. Both version numbers are signals to users
    # what to expect from different versions, and should be carefully
    # chosen based on the product plan.
    #
    # The major version is also reflected in the package name of the
    # interface, which must end in `v<major-version>`, as in
    # `google.feature.v1`. For major versions 0 and 1, the suffix can
    # be omitted. Zero major versions must only be used for
    # experimental, non-GA interfaces.
    version: typing.Text = ...
    # Source context for the protocol buffer service represented by this
    # message.
    @property
    def source_context(self) -> google.protobuf.source_context_pb2.SourceContext: ...
    # Included interfaces. See [Mixin][].
    @property
    def mixins(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Mixin]: ...
    # The source syntax of the service.
    syntax: google.protobuf.type_pb2.Syntax.V = ...
    def __init__(self,
        *,
        name : typing.Text = ...,
        methods : typing.Optional[typing.Iterable[global___Method]] = ...,
        options : typing.Optional[typing.Iterable[google.protobuf.type_pb2.Option]] = ...,
        version : typing.Text = ...,
        source_context : typing.Optional[google.protobuf.source_context_pb2.SourceContext] = ...,
        mixins : typing.Optional[typing.Iterable[global___Mixin]] = ...,
        syntax : google.protobuf.type_pb2.Syntax.V = ...,
        ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal[u"source_context",b"source_context"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal[u"methods",b"methods",u"mixins",b"mixins",u"name",b"name",u"options",b"options",u"source_context",b"source_context",u"syntax",b"syntax",u"version",b"version"]) -> None: ...
global___Api = Api

# Method represents a method of an API interface.
class Method(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
    NAME_FIELD_NUMBER: builtins.int
    REQUEST_TYPE_URL_FIELD_NUMBER: builtins.int
    REQUEST_STREAMING_FIELD_NUMBER: builtins.int
    RESPONSE_TYPE_URL_FIELD_NUMBER: builtins.int
    RESPONSE_STREAMING_FIELD_NUMBER: builtins.int
    OPTIONS_FIELD_NUMBER: builtins.int
    SYNTAX_FIELD_NUMBER: builtins.int
    # The simple name of this method.
    name: typing.Text = ...
    # A URL of the input message type.
    request_type_url: typing.Text = ...
    # If true, the request is streamed.
    request_streaming: builtins.bool = ...
    # The URL of the output message type.
    response_type_url: typing.Text = ...
    # If true, the response is streamed.
    response_streaming: builtins.bool = ...
    # Any metadata attached to the method.
    @property
    def options(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[google.protobuf.type_pb2.Option]: ...
    # The source syntax of this method.
    syntax: google.protobuf.type_pb2.Syntax.V = ...
    def __init__(self,
        *,
        name : typing.Text = ...,
        request_type_url : typing.Text = ...,
        request_streaming : builtins.bool = ...,
        response_type_url : typing.Text = ...,
        response_streaming : builtins.bool = ...,
        options : typing.Optional[typing.Iterable[google.protobuf.type_pb2.Option]] = ...,
        syntax : google.protobuf.type_pb2.Syntax.V = ...,
        ) -> None: ...
    def ClearField(self, field_name: typing_extensions.Literal[u"name",b"name",u"options",b"options",u"request_streaming",b"request_streaming",u"request_type_url",b"request_type_url",u"response_streaming",b"response_streaming",u"response_type_url",b"response_type_url",u"syntax",b"syntax"]) -> None: ...
global___Method = Method

# Declares an API Interface to be included in this interface. The including
# interface must redeclare all the methods from the included interface, but
# documentation and options are inherited as follows:
#
# - If after comment and whitespace stripping, the documentation
#   string of the redeclared method is empty, it will be inherited
#   from the original method.
#
# - Each annotation belonging to the service config (http,
#   visibility) which is not set in the redeclared method will be
#   inherited.
#
# - If an http annotation is inherited, the path pattern will be
#   modified as follows. Any version prefix will be replaced by the
#   version of the including interface plus the [root][] path if
#   specified.
#
# Example of a simple mixin:
#
#     package google.acl.v1;
#     service AccessControl {
#       // Get the underlying ACL object.
#       rpc GetAcl(GetAclRequest) returns (Acl) {
#         option (google.api.http).get = "/v1/{resource=**}:getAcl";
#       }
#     }
#
#     package google.storage.v2;
#     service Storage {
#       rpc GetAcl(GetAclRequest) returns (Acl);
#
#       // Get a data record.
#       rpc GetData(GetDataRequest) returns (Data) {
#         option (google.api.http).get = "/v2/{resource=**}";
#       }
#     }
#
# Example of a mixin configuration:
#
#     apis:
#     - name: google.storage.v2.Storage
#       mixins:
#       - name: google.acl.v1.AccessControl
#
# The mixin construct implies that all methods in `AccessControl` are
# also declared with same name and request/response types in
# `Storage`. A documentation generator or annotation processor will
# see the effective `Storage.GetAcl` method after inheriting
# documentation and annotations as follows:
#
#     service Storage {
#       // Get the underlying ACL object.
#       rpc GetAcl(GetAclRequest) returns (Acl) {
#         option (google.api.http).get = "/v2/{resource=**}:getAcl";
#       }
#       ...
#     }
#
# Note how the version in the path pattern changed from `v1` to `v2`.
#
# If the `root` field in the mixin is specified, it should be a
# relative path under which inherited HTTP paths are placed. Example:
#
#     apis:
#     - name: google.storage.v2.Storage
#       mixins:
#       - name: google.acl.v1.AccessControl
#         root: acls
#
# This implies the following inherited HTTP annotation:
#
#     service Storage {
#       // Get the underlying ACL object.
#       rpc GetAcl(GetAclRequest) returns (Acl) {
#         option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
#       }
#       ...
#     }
class Mixin(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
    NAME_FIELD_NUMBER: builtins.int
    ROOT_FIELD_NUMBER: builtins.int
    # The fully qualified name of the interface which is included.
    name: typing.Text = ...
    # If non-empty specifies a path under which inherited HTTP paths
    # are rooted.
    root: typing.Text = ...
    def __init__(self,
        *,
        name : typing.Text = ...,
        root : typing.Text = ...,
        ) -> None: ...
    def ClearField(self, field_name: typing_extensions.Literal[u"name",b"name",u"root",b"root"]) -> None: ...
global___Mixin = Mixin
