google-cloud-rust-raw 0.14.0

A set of client libraries to interact with various Google Cloud Platform services
Documentation
// This file is generated by rust-protobuf 2.28.0. Do not edit
// @generated

// https://github.com/rust-lang/rust-clippy/issues/702
#![allow(unknown_lints)]
#![allow(clippy::all)]

#![allow(unused_attributes)]
#![cfg_attr(rustfmt, rustfmt::skip)]

#![allow(box_pointers)]
#![allow(dead_code)]
#![allow(missing_docs)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(trivial_casts)]
#![allow(unused_imports)]
#![allow(unused_results)]
//! Generated file from `google/api/auth.proto`

/// Generated files are compatible only with the same version
/// of protobuf runtime.
// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_28_0;

#[derive(PartialEq,Clone,Default)]
pub struct Authentication {
    // message fields
    pub rules: ::protobuf::RepeatedField<AuthenticationRule>,
    pub providers: ::protobuf::RepeatedField<AuthProvider>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Authentication {
    fn default() -> &'a Authentication {
        <Authentication as ::protobuf::Message>::default_instance()
    }
}

impl Authentication {
    pub fn new() -> Authentication {
        ::std::default::Default::default()
    }

    // repeated .google.api.AuthenticationRule rules = 3;


    pub fn get_rules(&self) -> &[AuthenticationRule] {
        &self.rules
    }
    pub fn clear_rules(&mut self) {
        self.rules.clear();
    }

    // Param is passed by value, moved
    pub fn set_rules(&mut self, v: ::protobuf::RepeatedField<AuthenticationRule>) {
        self.rules = v;
    }

    // Mutable pointer to the field.
    pub fn mut_rules(&mut self) -> &mut ::protobuf::RepeatedField<AuthenticationRule> {
        &mut self.rules
    }

    // Take field
    pub fn take_rules(&mut self) -> ::protobuf::RepeatedField<AuthenticationRule> {
        ::std::mem::replace(&mut self.rules, ::protobuf::RepeatedField::new())
    }

    // repeated .google.api.AuthProvider providers = 4;


    pub fn get_providers(&self) -> &[AuthProvider] {
        &self.providers
    }
    pub fn clear_providers(&mut self) {
        self.providers.clear();
    }

    // Param is passed by value, moved
    pub fn set_providers(&mut self, v: ::protobuf::RepeatedField<AuthProvider>) {
        self.providers = v;
    }

    // Mutable pointer to the field.
    pub fn mut_providers(&mut self) -> &mut ::protobuf::RepeatedField<AuthProvider> {
        &mut self.providers
    }

    // Take field
    pub fn take_providers(&mut self) -> ::protobuf::RepeatedField<AuthProvider> {
        ::std::mem::replace(&mut self.providers, ::protobuf::RepeatedField::new())
    }
}

impl ::protobuf::Message for Authentication {
    fn is_initialized(&self) -> bool {
        for v in &self.rules {
            if !v.is_initialized() {
                return false;
            }
        };
        for v in &self.providers {
            if !v.is_initialized() {
                return false;
            }
        };
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                3 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.rules)?;
                },
                4 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.providers)?;
                },
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        for value in &self.rules {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        };
        for value in &self.providers {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        };
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        for v in &self.rules {
            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        };
        for v in &self.providers {
            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        };
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Authentication {
        Authentication::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage<AuthenticationRule>>(
                "rules",
                |m: &Authentication| { &m.rules },
                |m: &mut Authentication| { &mut m.rules },
            ));
            fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage<AuthProvider>>(
                "providers",
                |m: &Authentication| { &m.providers },
                |m: &mut Authentication| { &mut m.providers },
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Authentication>(
                "Authentication",
                fields,
                file_descriptor_proto()
            )
        })
    }

    fn default_instance() -> &'static Authentication {
        static instance: ::protobuf::rt::LazyV2<Authentication> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Authentication::new)
    }
}

impl ::protobuf::Clear for Authentication {
    fn clear(&mut self) {
        self.rules.clear();
        self.providers.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Authentication {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Authentication {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq,Clone,Default)]
pub struct AuthenticationRule {
    // message fields
    pub selector: ::std::string::String,
    pub oauth: ::protobuf::SingularPtrField<OAuthRequirements>,
    pub allow_without_credential: bool,
    pub requirements: ::protobuf::RepeatedField<AuthRequirement>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a AuthenticationRule {
    fn default() -> &'a AuthenticationRule {
        <AuthenticationRule as ::protobuf::Message>::default_instance()
    }
}

impl AuthenticationRule {
    pub fn new() -> AuthenticationRule {
        ::std::default::Default::default()
    }

    // string selector = 1;


    pub fn get_selector(&self) -> &str {
        &self.selector
    }
    pub fn clear_selector(&mut self) {
        self.selector.clear();
    }

    // Param is passed by value, moved
    pub fn set_selector(&mut self, v: ::std::string::String) {
        self.selector = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_selector(&mut self) -> &mut ::std::string::String {
        &mut self.selector
    }

    // Take field
    pub fn take_selector(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.selector, ::std::string::String::new())
    }

    // .google.api.OAuthRequirements oauth = 2;


    pub fn get_oauth(&self) -> &OAuthRequirements {
        self.oauth.as_ref().unwrap_or_else(|| <OAuthRequirements as ::protobuf::Message>::default_instance())
    }
    pub fn clear_oauth(&mut self) {
        self.oauth.clear();
    }

    pub fn has_oauth(&self) -> bool {
        self.oauth.is_some()
    }

    // Param is passed by value, moved
    pub fn set_oauth(&mut self, v: OAuthRequirements) {
        self.oauth = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_oauth(&mut self) -> &mut OAuthRequirements {
        if self.oauth.is_none() {
            self.oauth.set_default();
        }
        self.oauth.as_mut().unwrap()
    }

    // Take field
    pub fn take_oauth(&mut self) -> OAuthRequirements {
        self.oauth.take().unwrap_or_else(|| OAuthRequirements::new())
    }

    // bool allow_without_credential = 5;


    pub fn get_allow_without_credential(&self) -> bool {
        self.allow_without_credential
    }
    pub fn clear_allow_without_credential(&mut self) {
        self.allow_without_credential = false;
    }

    // Param is passed by value, moved
    pub fn set_allow_without_credential(&mut self, v: bool) {
        self.allow_without_credential = v;
    }

    // repeated .google.api.AuthRequirement requirements = 7;


    pub fn get_requirements(&self) -> &[AuthRequirement] {
        &self.requirements
    }
    pub fn clear_requirements(&mut self) {
        self.requirements.clear();
    }

    // Param is passed by value, moved
    pub fn set_requirements(&mut self, v: ::protobuf::RepeatedField<AuthRequirement>) {
        self.requirements = v;
    }

    // Mutable pointer to the field.
    pub fn mut_requirements(&mut self) -> &mut ::protobuf::RepeatedField<AuthRequirement> {
        &mut self.requirements
    }

    // Take field
    pub fn take_requirements(&mut self) -> ::protobuf::RepeatedField<AuthRequirement> {
        ::std::mem::replace(&mut self.requirements, ::protobuf::RepeatedField::new())
    }
}

impl ::protobuf::Message for AuthenticationRule {
    fn is_initialized(&self) -> bool {
        for v in &self.oauth {
            if !v.is_initialized() {
                return false;
            }
        };
        for v in &self.requirements {
            if !v.is_initialized() {
                return false;
            }
        };
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.selector)?;
                },
                2 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.oauth)?;
                },
                5 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
                    }
                    let tmp = is.read_bool()?;
                    self.allow_without_credential = tmp;
                },
                7 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.requirements)?;
                },
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.selector.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.selector);
        }
        if let Some(ref v) = self.oauth.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if self.allow_without_credential != false {
            my_size += 2;
        }
        for value in &self.requirements {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        };
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        if !self.selector.is_empty() {
            os.write_string(1, &self.selector)?;
        }
        if let Some(ref v) = self.oauth.as_ref() {
            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if self.allow_without_credential != false {
            os.write_bool(5, self.allow_without_credential)?;
        }
        for v in &self.requirements {
            os.write_tag(7, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        };
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> AuthenticationRule {
        AuthenticationRule::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "selector",
                |m: &AuthenticationRule| { &m.selector },
                |m: &mut AuthenticationRule| { &mut m.selector },
            ));
            fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage<OAuthRequirements>>(
                "oauth",
                |m: &AuthenticationRule| { &m.oauth },
                |m: &mut AuthenticationRule| { &mut m.oauth },
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBool>(
                "allow_without_credential",
                |m: &AuthenticationRule| { &m.allow_without_credential },
                |m: &mut AuthenticationRule| { &mut m.allow_without_credential },
            ));
            fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage<AuthRequirement>>(
                "requirements",
                |m: &AuthenticationRule| { &m.requirements },
                |m: &mut AuthenticationRule| { &mut m.requirements },
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<AuthenticationRule>(
                "AuthenticationRule",
                fields,
                file_descriptor_proto()
            )
        })
    }

    fn default_instance() -> &'static AuthenticationRule {
        static instance: ::protobuf::rt::LazyV2<AuthenticationRule> = ::protobuf::rt::LazyV2::INIT;
        instance.get(AuthenticationRule::new)
    }
}

impl ::protobuf::Clear for AuthenticationRule {
    fn clear(&mut self) {
        self.selector.clear();
        self.oauth.clear();
        self.allow_without_credential = false;
        self.requirements.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for AuthenticationRule {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for AuthenticationRule {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq,Clone,Default)]
pub struct AuthProvider {
    // message fields
    pub id: ::std::string::String,
    pub issuer: ::std::string::String,
    pub jwks_uri: ::std::string::String,
    pub audiences: ::std::string::String,
    pub authorization_url: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a AuthProvider {
    fn default() -> &'a AuthProvider {
        <AuthProvider as ::protobuf::Message>::default_instance()
    }
}

impl AuthProvider {
    pub fn new() -> AuthProvider {
        ::std::default::Default::default()
    }

    // string id = 1;


    pub fn get_id(&self) -> &str {
        &self.id
    }
    pub fn clear_id(&mut self) {
        self.id.clear();
    }

    // Param is passed by value, moved
    pub fn set_id(&mut self, v: ::std::string::String) {
        self.id = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_id(&mut self) -> &mut ::std::string::String {
        &mut self.id
    }

    // Take field
    pub fn take_id(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.id, ::std::string::String::new())
    }

    // string issuer = 2;


    pub fn get_issuer(&self) -> &str {
        &self.issuer
    }
    pub fn clear_issuer(&mut self) {
        self.issuer.clear();
    }

    // Param is passed by value, moved
    pub fn set_issuer(&mut self, v: ::std::string::String) {
        self.issuer = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_issuer(&mut self) -> &mut ::std::string::String {
        &mut self.issuer
    }

    // Take field
    pub fn take_issuer(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.issuer, ::std::string::String::new())
    }

    // string jwks_uri = 3;


    pub fn get_jwks_uri(&self) -> &str {
        &self.jwks_uri
    }
    pub fn clear_jwks_uri(&mut self) {
        self.jwks_uri.clear();
    }

    // Param is passed by value, moved
    pub fn set_jwks_uri(&mut self, v: ::std::string::String) {
        self.jwks_uri = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_jwks_uri(&mut self) -> &mut ::std::string::String {
        &mut self.jwks_uri
    }

    // Take field
    pub fn take_jwks_uri(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.jwks_uri, ::std::string::String::new())
    }

    // string audiences = 4;


    pub fn get_audiences(&self) -> &str {
        &self.audiences
    }
    pub fn clear_audiences(&mut self) {
        self.audiences.clear();
    }

    // Param is passed by value, moved
    pub fn set_audiences(&mut self, v: ::std::string::String) {
        self.audiences = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_audiences(&mut self) -> &mut ::std::string::String {
        &mut self.audiences
    }

    // Take field
    pub fn take_audiences(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.audiences, ::std::string::String::new())
    }

    // string authorization_url = 5;


    pub fn get_authorization_url(&self) -> &str {
        &self.authorization_url
    }
    pub fn clear_authorization_url(&mut self) {
        self.authorization_url.clear();
    }

    // Param is passed by value, moved
    pub fn set_authorization_url(&mut self, v: ::std::string::String) {
        self.authorization_url = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_authorization_url(&mut self) -> &mut ::std::string::String {
        &mut self.authorization_url
    }

    // Take field
    pub fn take_authorization_url(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.authorization_url, ::std::string::String::new())
    }
}

impl ::protobuf::Message for AuthProvider {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.id)?;
                },
                2 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.issuer)?;
                },
                3 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.jwks_uri)?;
                },
                4 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.audiences)?;
                },
                5 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.authorization_url)?;
                },
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.id.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.id);
        }
        if !self.issuer.is_empty() {
            my_size += ::protobuf::rt::string_size(2, &self.issuer);
        }
        if !self.jwks_uri.is_empty() {
            my_size += ::protobuf::rt::string_size(3, &self.jwks_uri);
        }
        if !self.audiences.is_empty() {
            my_size += ::protobuf::rt::string_size(4, &self.audiences);
        }
        if !self.authorization_url.is_empty() {
            my_size += ::protobuf::rt::string_size(5, &self.authorization_url);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        if !self.id.is_empty() {
            os.write_string(1, &self.id)?;
        }
        if !self.issuer.is_empty() {
            os.write_string(2, &self.issuer)?;
        }
        if !self.jwks_uri.is_empty() {
            os.write_string(3, &self.jwks_uri)?;
        }
        if !self.audiences.is_empty() {
            os.write_string(4, &self.audiences)?;
        }
        if !self.authorization_url.is_empty() {
            os.write_string(5, &self.authorization_url)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> AuthProvider {
        AuthProvider::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "id",
                |m: &AuthProvider| { &m.id },
                |m: &mut AuthProvider| { &mut m.id },
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "issuer",
                |m: &AuthProvider| { &m.issuer },
                |m: &mut AuthProvider| { &mut m.issuer },
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "jwks_uri",
                |m: &AuthProvider| { &m.jwks_uri },
                |m: &mut AuthProvider| { &mut m.jwks_uri },
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "audiences",
                |m: &AuthProvider| { &m.audiences },
                |m: &mut AuthProvider| { &mut m.audiences },
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "authorization_url",
                |m: &AuthProvider| { &m.authorization_url },
                |m: &mut AuthProvider| { &mut m.authorization_url },
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<AuthProvider>(
                "AuthProvider",
                fields,
                file_descriptor_proto()
            )
        })
    }

    fn default_instance() -> &'static AuthProvider {
        static instance: ::protobuf::rt::LazyV2<AuthProvider> = ::protobuf::rt::LazyV2::INIT;
        instance.get(AuthProvider::new)
    }
}

impl ::protobuf::Clear for AuthProvider {
    fn clear(&mut self) {
        self.id.clear();
        self.issuer.clear();
        self.jwks_uri.clear();
        self.audiences.clear();
        self.authorization_url.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for AuthProvider {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for AuthProvider {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq,Clone,Default)]
pub struct OAuthRequirements {
    // message fields
    pub canonical_scopes: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a OAuthRequirements {
    fn default() -> &'a OAuthRequirements {
        <OAuthRequirements as ::protobuf::Message>::default_instance()
    }
}

impl OAuthRequirements {
    pub fn new() -> OAuthRequirements {
        ::std::default::Default::default()
    }

    // string canonical_scopes = 1;


    pub fn get_canonical_scopes(&self) -> &str {
        &self.canonical_scopes
    }
    pub fn clear_canonical_scopes(&mut self) {
        self.canonical_scopes.clear();
    }

    // Param is passed by value, moved
    pub fn set_canonical_scopes(&mut self, v: ::std::string::String) {
        self.canonical_scopes = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_canonical_scopes(&mut self) -> &mut ::std::string::String {
        &mut self.canonical_scopes
    }

    // Take field
    pub fn take_canonical_scopes(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.canonical_scopes, ::std::string::String::new())
    }
}

impl ::protobuf::Message for OAuthRequirements {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.canonical_scopes)?;
                },
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.canonical_scopes.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.canonical_scopes);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        if !self.canonical_scopes.is_empty() {
            os.write_string(1, &self.canonical_scopes)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> OAuthRequirements {
        OAuthRequirements::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "canonical_scopes",
                |m: &OAuthRequirements| { &m.canonical_scopes },
                |m: &mut OAuthRequirements| { &mut m.canonical_scopes },
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<OAuthRequirements>(
                "OAuthRequirements",
                fields,
                file_descriptor_proto()
            )
        })
    }

    fn default_instance() -> &'static OAuthRequirements {
        static instance: ::protobuf::rt::LazyV2<OAuthRequirements> = ::protobuf::rt::LazyV2::INIT;
        instance.get(OAuthRequirements::new)
    }
}

impl ::protobuf::Clear for OAuthRequirements {
    fn clear(&mut self) {
        self.canonical_scopes.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for OAuthRequirements {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for OAuthRequirements {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq,Clone,Default)]
pub struct AuthRequirement {
    // message fields
    pub provider_id: ::std::string::String,
    pub audiences: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a AuthRequirement {
    fn default() -> &'a AuthRequirement {
        <AuthRequirement as ::protobuf::Message>::default_instance()
    }
}

impl AuthRequirement {
    pub fn new() -> AuthRequirement {
        ::std::default::Default::default()
    }

    // string provider_id = 1;


    pub fn get_provider_id(&self) -> &str {
        &self.provider_id
    }
    pub fn clear_provider_id(&mut self) {
        self.provider_id.clear();
    }

    // Param is passed by value, moved
    pub fn set_provider_id(&mut self, v: ::std::string::String) {
        self.provider_id = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_provider_id(&mut self) -> &mut ::std::string::String {
        &mut self.provider_id
    }

    // Take field
    pub fn take_provider_id(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.provider_id, ::std::string::String::new())
    }

    // string audiences = 2;


    pub fn get_audiences(&self) -> &str {
        &self.audiences
    }
    pub fn clear_audiences(&mut self) {
        self.audiences.clear();
    }

    // Param is passed by value, moved
    pub fn set_audiences(&mut self, v: ::std::string::String) {
        self.audiences = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_audiences(&mut self) -> &mut ::std::string::String {
        &mut self.audiences
    }

    // Take field
    pub fn take_audiences(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.audiences, ::std::string::String::new())
    }
}

impl ::protobuf::Message for AuthRequirement {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.provider_id)?;
                },
                2 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.audiences)?;
                },
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.provider_id.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.provider_id);
        }
        if !self.audiences.is_empty() {
            my_size += ::protobuf::rt::string_size(2, &self.audiences);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
        if !self.provider_id.is_empty() {
            os.write_string(1, &self.provider_id)?;
        }
        if !self.audiences.is_empty() {
            os.write_string(2, &self.audiences)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> AuthRequirement {
        AuthRequirement::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "provider_id",
                |m: &AuthRequirement| { &m.provider_id },
                |m: &mut AuthRequirement| { &mut m.provider_id },
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
                "audiences",
                |m: &AuthRequirement| { &m.audiences },
                |m: &mut AuthRequirement| { &mut m.audiences },
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<AuthRequirement>(
                "AuthRequirement",
                fields,
                file_descriptor_proto()
            )
        })
    }

    fn default_instance() -> &'static AuthRequirement {
        static instance: ::protobuf::rt::LazyV2<AuthRequirement> = ::protobuf::rt::LazyV2::INIT;
        instance.get(AuthRequirement::new)
    }
}

impl ::protobuf::Clear for AuthRequirement {
    fn clear(&mut self) {
        self.provider_id.clear();
        self.audiences.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for AuthRequirement {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for AuthRequirement {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

static file_descriptor_proto_data: &'static [u8] = b"\
    \n\x15google/api/auth.proto\x12\ngoogle.api\"~\n\x0eAuthentication\x124\
    \n\x05rules\x18\x03\x20\x03(\x0b2\x1e.google.api.AuthenticationRuleR\x05\
    rules\x126\n\tproviders\x18\x04\x20\x03(\x0b2\x18.google.api.AuthProvide\
    rR\tproviders\"\xe0\x01\n\x12AuthenticationRule\x12\x1a\n\x08selector\
    \x18\x01\x20\x01(\tR\x08selector\x123\n\x05oauth\x18\x02\x20\x01(\x0b2\
    \x1d.google.api.OAuthRequirementsR\x05oauth\x128\n\x18allow_without_cred\
    ential\x18\x05\x20\x01(\x08R\x16allowWithoutCredential\x12?\n\x0crequire\
    ments\x18\x07\x20\x03(\x0b2\x1b.google.api.AuthRequirementR\x0crequireme\
    nts\"\x9c\x01\n\x0cAuthProvider\x12\x0e\n\x02id\x18\x01\x20\x01(\tR\x02i\
    d\x12\x16\n\x06issuer\x18\x02\x20\x01(\tR\x06issuer\x12\x19\n\x08jwks_ur\
    i\x18\x03\x20\x01(\tR\x07jwksUri\x12\x1c\n\taudiences\x18\x04\x20\x01(\t\
    R\taudiences\x12+\n\x11authorization_url\x18\x05\x20\x01(\tR\x10authoriz\
    ationUrl\">\n\x11OAuthRequirements\x12)\n\x10canonical_scopes\x18\x01\
    \x20\x01(\tR\x0fcanonicalScopes\"P\n\x0fAuthRequirement\x12\x1f\n\x0bpro\
    vider_id\x18\x01\x20\x01(\tR\nproviderId\x12\x1c\n\taudiences\x18\x02\
    \x20\x01(\tR\taudiencesBk\n\x0ecom.google.apiB\tAuthProtoP\x01ZEgoogle.g\
    olang.org/genproto/googleapis/api/serviceconfig;serviceconfig\xa2\x02\
    \x04GAPIJ\xc58\n\x07\x12\x05\x0f\0\xb7\x01\x01\n\xbe\x04\n\x01\x0c\x12\
    \x03\x0f\0\x122\xb3\x04\x20Copyright\x202019\x20Google\x20LLC.\n\n\x20Li\
    censed\x20under\x20the\x20Apache\x20License,\x20Version\x202.0\x20(the\
    \x20\"License\");\n\x20you\x20may\x20not\x20use\x20this\x20file\x20excep\
    t\x20in\x20compliance\x20with\x20the\x20License.\n\x20You\x20may\x20obta\
    in\x20a\x20copy\x20of\x20the\x20License\x20at\n\n\x20\x20\x20\x20\x20htt\
    p://www.apache.org/licenses/LICENSE-2.0\n\n\x20Unless\x20required\x20by\
    \x20applicable\x20law\x20or\x20agreed\x20to\x20in\x20writing,\x20softwar\
    e\n\x20distributed\x20under\x20the\x20License\x20is\x20distributed\x20on\
    \x20an\x20\"AS\x20IS\"\x20BASIS,\n\x20WITHOUT\x20WARRANTIES\x20OR\x20CON\
    DITIONS\x20OF\x20ANY\x20KIND,\x20either\x20express\x20or\x20implied.\n\
    \x20See\x20the\x20License\x20for\x20the\x20specific\x20language\x20gover\
    ning\x20permissions\x20and\n\x20limitations\x20under\x20the\x20License.\
    \n\n\n\x08\n\x01\x02\x12\x03\x11\0\x13\n\x08\n\x01\x08\x12\x03\x13\0\\\n\
    \t\n\x02\x08\x0b\x12\x03\x13\0\\\n\x08\n\x01\x08\x12\x03\x14\0\"\n\t\n\
    \x02\x08\n\x12\x03\x14\0\"\n\x08\n\x01\x08\x12\x03\x15\0*\n\t\n\x02\x08\
    \x08\x12\x03\x15\0*\n\x08\n\x01\x08\x12\x03\x16\0'\n\t\n\x02\x08\x01\x12\
    \x03\x16\0'\n\x08\n\x01\x08\x12\x03\x17\0\"\n\t\n\x02\x08$\x12\x03\x17\0\
    \"\n\xc8\x03\n\x02\x04\0\x12\x04'\0/\x01\x1a\xbb\x03\x20`Authentication`\
    \x20defines\x20the\x20authentication\x20configuration\x20for\x20an\x20AP\
    I.\n\n\x20Example\x20for\x20an\x20API\x20targeted\x20for\x20external\x20\
    use:\n\n\x20\x20\x20\x20\x20name:\x20calendar.googleapis.com\n\x20\x20\
    \x20\x20\x20authentication:\n\x20\x20\x20\x20\x20\x20\x20providers:\n\
    \x20\x20\x20\x20\x20\x20\x20-\x20id:\x20google_calendar_auth\n\x20\x20\
    \x20\x20\x20\x20\x20\x20\x20jwks_uri:\x20https://www.googleapis.com/oaut\
    h2/v1/certs\n\x20\x20\x20\x20\x20\x20\x20\x20\x20issuer:\x20https://secu\
    retoken.google.com\n\x20\x20\x20\x20\x20\x20\x20rules:\n\x20\x20\x20\x20\
    \x20\x20\x20-\x20selector:\x20\"*\"\n\x20\x20\x20\x20\x20\x20\x20\x20\
    \x20requirements:\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20provider_\
    id:\x20google_calendar_auth\n\n\n\n\x03\x04\0\x01\x12\x03'\x08\x16\n\x9e\
    \x01\n\x04\x04\0\x02\0\x12\x03+\x02(\x1a\x90\x01\x20A\x20list\x20of\x20a\
    uthentication\x20rules\x20that\x20apply\x20to\x20individual\x20API\x20me\
    thods.\n\n\x20**NOTE:**\x20All\x20service\x20configuration\x20rules\x20f\
    ollow\x20\"last\x20one\x20wins\"\x20order.\n\n\x0c\n\x05\x04\0\x02\0\x04\
    \x12\x03+\x02\n\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03+\x0b\x1d\n\x0c\n\x05\
    \x04\0\x02\0\x01\x12\x03+\x1e#\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03+&'\nQ\
    \n\x04\x04\0\x02\x01\x12\x03.\x02&\x1aD\x20Defines\x20a\x20set\x20of\x20\
    authentication\x20providers\x20that\x20a\x20service\x20supports.\n\n\x0c\
    \n\x05\x04\0\x02\x01\x04\x12\x03.\x02\n\n\x0c\n\x05\x04\0\x02\x01\x06\
    \x12\x03.\x0b\x17\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03.\x18!\n\x0c\n\
    \x05\x04\0\x02\x01\x03\x12\x03.$%\n\xed\x02\n\x02\x04\x01\x12\x04:\0H\
    \x01\x1a\xe0\x02\x20Authentication\x20rules\x20for\x20the\x20service.\n\
    \n\x20By\x20default,\x20if\x20a\x20method\x20has\x20any\x20authenticatio\
    n\x20requirements,\x20every\x20request\n\x20must\x20include\x20a\x20vali\
    d\x20credential\x20matching\x20one\x20of\x20the\x20requirements.\n\x20It\
    's\x20an\x20error\x20to\x20include\x20more\x20than\x20one\x20kind\x20of\
    \x20credential\x20in\x20a\x20single\n\x20request.\n\n\x20If\x20a\x20meth\
    od\x20doesn't\x20have\x20any\x20auth\x20requirements,\x20request\x20cred\
    entials\x20will\x20be\n\x20ignored.\n\n\n\n\x03\x04\x01\x01\x12\x03:\x08\
    \x1a\n\x90\x01\n\x04\x04\x01\x02\0\x12\x03>\x02\x16\x1a\x82\x01\x20Selec\
    ts\x20the\x20methods\x20to\x20which\x20this\x20rule\x20applies.\n\n\x20R\
    efer\x20to\x20[selector][google.api.DocumentationRule.selector]\x20for\
    \x20syntax\x20details.\n\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03>\x02\x08\
    \n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03>\t\x11\n\x0c\n\x05\x04\x01\x02\0\
    \x03\x12\x03>\x14\x15\n6\n\x04\x04\x01\x02\x01\x12\x03A\x02\x1e\x1a)\x20\
    The\x20requirements\x20for\x20OAuth\x20credentials.\n\n\x0c\n\x05\x04\
    \x01\x02\x01\x06\x12\x03A\x02\x13\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\
    \x03A\x14\x19\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03A\x1c\x1d\nR\n\x04\
    \x04\x01\x02\x02\x12\x03D\x02$\x1aE\x20If\x20true,\x20the\x20service\x20\
    accepts\x20API\x20keys\x20without\x20any\x20other\x20credential.\n\n\x0c\
    \n\x05\x04\x01\x02\x02\x05\x12\x03D\x02\x06\n\x0c\n\x05\x04\x01\x02\x02\
    \x01\x12\x03D\x07\x1f\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x03D\"#\nD\n\
    \x04\x04\x01\x02\x03\x12\x03G\x02,\x1a7\x20Requirements\x20for\x20additi\
    onal\x20authentication\x20providers.\n\n\x0c\n\x05\x04\x01\x02\x03\x04\
    \x12\x03G\x02\n\n\x0c\n\x05\x04\x01\x02\x03\x06\x12\x03G\x0b\x1a\n\x0c\n\
    \x05\x04\x01\x02\x03\x01\x12\x03G\x1b'\n\x0c\n\x05\x04\x01\x02\x03\x03\
    \x12\x03G*+\n\xac\x01\n\x02\x04\x02\x12\x04M\0|\x01\x1a\x9f\x01\x20Confi\
    guration\x20for\x20an\x20authentication\x20provider,\x20including\x20sup\
    port\x20for\n\x20[JSON\x20Web\x20Token\n\x20(JWT)](https://tools.ietf.or\
    g/html/draft-ietf-oauth-json-web-token-32).\n\n\n\n\x03\x04\x02\x01\x12\
    \x03M\x08\x14\n\x92\x01\n\x04\x04\x02\x02\0\x12\x03R\x02\x10\x1a\x84\x01\
    \x20The\x20unique\x20identifier\x20of\x20the\x20auth\x20provider.\x20It\
    \x20will\x20be\x20referred\x20to\x20by\n\x20`AuthRequirement.provider_id\
    `.\n\n\x20Example:\x20\"bookstore_auth\".\n\n\x0c\n\x05\x04\x02\x02\0\
    \x05\x12\x03R\x02\x08\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03R\t\x0b\n\x0c\
    \n\x05\x04\x02\x02\0\x03\x12\x03R\x0e\x0f\n\x95\x02\n\x04\x04\x02\x02\
    \x01\x12\x03Z\x02\x14\x1a\x87\x02\x20Identifies\x20the\x20principal\x20t\
    hat\x20issued\x20the\x20JWT.\x20See\n\x20https://tools.ietf.org/html/dra\
    ft-ietf-oauth-json-web-token-32#section-4.1.1\n\x20Usually\x20a\x20URL\
    \x20or\x20an\x20email\x20address.\n\n\x20Example:\x20https://securetoken\
    .google.com\n\x20Example:\x201234567-compute@developer.gserviceaccount.c\
    om\n\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03Z\x02\x08\n\x0c\n\x05\x04\
    \x02\x02\x01\x01\x12\x03Z\t\x0f\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03Z\
    \x12\x13\n\xf4\x03\n\x04\x04\x02\x02\x02\x12\x03h\x02\x16\x1a\xe6\x03\
    \x20URL\x20of\x20the\x20provider's\x20public\x20key\x20set\x20to\x20vali\
    date\x20signature\x20of\x20the\x20JWT.\x20See\n\x20[OpenID\n\x20Discover\
    y](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMe\
    tadata).\n\x20Optional\x20if\x20the\x20key\x20set\x20document:\n\x20\x20\
    -\x20can\x20be\x20retrieved\x20from\n\x20\x20\x20\x20[OpenID\n\x20\x20\
    \x20\x20Discovery](https://openid.net/specs/openid-connect-discovery-1_0\
    .html\x20of\n\x20\x20\x20\x20the\x20issuer.\n\x20\x20-\x20can\x20be\x20i\
    nferred\x20from\x20the\x20email\x20domain\x20of\x20the\x20issuer\x20(e.g\
    .\x20a\x20Google\n\x20\x20service\x20account).\n\n\x20Example:\x20https:\
    //www.googleapis.com/oauth2/v1/certs\n\n\x0c\n\x05\x04\x02\x02\x02\x05\
    \x12\x03h\x02\x08\n\x0c\n\x05\x04\x02\x02\x02\x01\x12\x03h\t\x11\n\x0c\n\
    \x05\x04\x02\x02\x02\x03\x12\x03h\x14\x15\n\xc1\x05\n\x04\x04\x02\x02\
    \x03\x12\x03w\x02\x17\x1a\xb3\x05\x20The\x20list\x20of\x20JWT\n\x20[audi\
    ences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#se\
    ction-4.1.3).\n\x20that\x20are\x20allowed\x20to\x20access.\x20A\x20JWT\
    \x20containing\x20any\x20of\x20these\x20audiences\x20will\n\x20be\x20acc\
    epted.\x20When\x20this\x20setting\x20is\x20absent,\x20only\x20JWTs\x20wi\
    th\x20audience\n\x20\"https://[Service_name][google.api.Service.name]/[A\
    PI_name][google.protobuf.Api.name]\"\n\x20will\x20be\x20accepted.\x20For\
    \x20example,\x20if\x20no\x20audiences\x20are\x20in\x20the\x20setting,\n\
    \x20LibraryService\x20API\x20will\x20only\x20accept\x20JWTs\x20with\x20t\
    he\x20following\x20audience\n\x20\"https://library-example.googleapis.co\
    m/google.example.library.v1.LibraryService\".\n\n\x20Example:\n\n\x20\
    \x20\x20\x20\x20audiences:\x20bookstore_android.apps.googleusercontent.c\
    om,\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20boo\
    kstore_web.apps.googleusercontent.com\n\n\x0c\n\x05\x04\x02\x02\x03\x05\
    \x12\x03w\x02\x08\n\x0c\n\x05\x04\x02\x02\x03\x01\x12\x03w\t\x12\n\x0c\n\
    \x05\x04\x02\x02\x03\x03\x12\x03w\x15\x16\n\x98\x01\n\x04\x04\x02\x02\
    \x04\x12\x03{\x02\x1f\x1a\x8a\x01\x20Redirect\x20URL\x20if\x20JWT\x20tok\
    en\x20is\x20required\x20but\x20not\x20present\x20or\x20is\x20expired.\n\
    \x20Implement\x20authorizationUrl\x20of\x20securityDefinitions\x20in\x20\
    OpenAPI\x20spec.\n\n\x0c\n\x05\x04\x02\x02\x04\x05\x12\x03{\x02\x08\n\
    \x0c\n\x05\x04\x02\x02\x04\x01\x12\x03{\t\x1a\n\x0c\n\x05\x04\x02\x02\
    \x04\x03\x12\x03{\x1d\x1e\n\xe7\x07\n\x02\x04\x03\x12\x06\x90\x01\0\x99\
    \x01\x01\x1a\xd8\x07\x20OAuth\x20scopes\x20are\x20a\x20way\x20to\x20defi\
    ne\x20data\x20and\x20permissions\x20on\x20data.\x20For\x20example,\n\x20\
    there\x20are\x20scopes\x20defined\x20for\x20\"Read-only\x20access\x20to\
    \x20Google\x20Calendar\"\x20and\n\x20\"Access\x20to\x20Cloud\x20Platform\
    \".\x20Users\x20can\x20consent\x20to\x20a\x20scope\x20for\x20an\x20appli\
    cation,\n\x20giving\x20it\x20permission\x20to\x20access\x20that\x20data\
    \x20on\x20their\x20behalf.\n\n\x20OAuth\x20scope\x20specifications\x20sh\
    ould\x20be\x20fairly\x20coarse\x20grained;\x20a\x20user\x20will\x20need\
    \n\x20to\x20see\x20and\x20understand\x20the\x20text\x20description\x20of\
    \x20what\x20your\x20scope\x20means.\n\n\x20In\x20most\x20cases:\x20use\
    \x20one\x20or\x20at\x20most\x20two\x20OAuth\x20scopes\x20for\x20an\x20en\
    tire\x20family\x20of\n\x20products.\x20If\x20your\x20product\x20has\x20m\
    ultiple\x20APIs,\x20you\x20should\x20probably\x20be\x20sharing\n\x20the\
    \x20OAuth\x20scope\x20across\x20all\x20of\x20those\x20APIs.\n\n\x20When\
    \x20you\x20need\x20finer\x20grained\x20OAuth\x20consent\x20screens:\x20t\
    alk\x20with\x20your\x20product\n\x20management\x20about\x20how\x20develo\
    pers\x20will\x20use\x20them\x20in\x20practice.\n\n\x20Please\x20note\x20\
    that\x20even\x20though\x20each\x20of\x20the\x20canonical\x20scopes\x20is\
    \x20enough\x20for\x20a\n\x20request\x20to\x20be\x20accepted\x20and\x20pa\
    ssed\x20to\x20the\x20backend,\x20a\x20request\x20can\x20still\x20fail\n\
    \x20due\x20to\x20the\x20backend\x20requiring\x20additional\x20scopes\x20\
    or\x20permissions.\n\n\x0b\n\x03\x04\x03\x01\x12\x04\x90\x01\x08\x19\n\
    \xab\x02\n\x04\x04\x03\x02\0\x12\x04\x98\x01\x02\x1e\x1a\x9c\x02\x20The\
    \x20list\x20of\x20publicly\x20documented\x20OAuth\x20scopes\x20that\x20a\
    re\x20allowed\x20access.\x20An\n\x20OAuth\x20token\x20containing\x20any\
    \x20of\x20these\x20scopes\x20will\x20be\x20accepted.\n\n\x20Example:\n\n\
    \x20\x20\x20\x20\x20\x20canonical_scopes:\x20https://www.googleapis.com/\
    auth/calendar,\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
    \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20https://www.googleapis.com/auth/\
    calendar.read\n\n\r\n\x05\x04\x03\x02\0\x05\x12\x04\x98\x01\x02\x08\n\r\
    \n\x05\x04\x03\x02\0\x01\x12\x04\x98\x01\t\x19\n\r\n\x05\x04\x03\x02\0\
    \x03\x12\x04\x98\x01\x1c\x1d\n\xaa\x01\n\x02\x04\x04\x12\x06\x9e\x01\0\
    \xb7\x01\x01\x1a\x9b\x01\x20User-defined\x20authentication\x20requiremen\
    ts,\x20including\x20support\x20for\n\x20[JSON\x20Web\x20Token\n\x20(JWT)\
    ](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).\n\n\
    \x0b\n\x03\x04\x04\x01\x12\x04\x9e\x01\x08\x17\n{\n\x04\x04\x04\x02\0\
    \x12\x04\xa4\x01\x02\x19\x1am\x20[id][google.api.AuthProvider.id]\x20fro\
    m\x20authentication\x20provider.\n\n\x20Example:\n\n\x20\x20\x20\x20\x20\
    provider_id:\x20bookstore_auth\n\n\r\n\x05\x04\x04\x02\0\x05\x12\x04\xa4\
    \x01\x02\x08\n\r\n\x05\x04\x04\x02\0\x01\x12\x04\xa4\x01\t\x14\n\r\n\x05\
    \x04\x04\x02\0\x03\x12\x04\xa4\x01\x17\x18\n\xc0\x06\n\x04\x04\x04\x02\
    \x01\x12\x04\xb6\x01\x02\x17\x1a\xb1\x06\x20NOTE:\x20This\x20will\x20be\
    \x20deprecated\x20soon,\x20once\x20AuthProvider.audiences\x20is\n\x20imp\
    lemented\x20and\x20accepted\x20in\x20all\x20the\x20runtime\x20components\
    .\n\n\x20The\x20list\x20of\x20JWT\n\x20[audiences](https://tools.ietf.or\
    g/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n\x20that\x20a\
    re\x20allowed\x20to\x20access.\x20A\x20JWT\x20containing\x20any\x20of\
    \x20these\x20audiences\x20will\n\x20be\x20accepted.\x20When\x20this\x20s\
    etting\x20is\x20absent,\x20only\x20JWTs\x20with\x20audience\n\x20\"https\
    ://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Ap\
    i.name]\"\n\x20will\x20be\x20accepted.\x20For\x20example,\x20if\x20no\
    \x20audiences\x20are\x20in\x20the\x20setting,\n\x20LibraryService\x20API\
    \x20will\x20only\x20accept\x20JWTs\x20with\x20the\x20following\x20audien\
    ce\n\x20\"https://library-example.googleapis.com/google.example.library.\
    v1.LibraryService\".\n\n\x20Example:\n\n\x20\x20\x20\x20\x20audiences:\
    \x20bookstore_android.apps.googleusercontent.com,\n\x20\x20\x20\x20\x20\
    \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20bookstore_web.apps.googleuse\
    rcontent.com\n\n\r\n\x05\x04\x04\x02\x01\x05\x12\x04\xb6\x01\x02\x08\n\r\
    \n\x05\x04\x04\x02\x01\x01\x12\x04\xb6\x01\t\x12\n\r\n\x05\x04\x04\x02\
    \x01\x03\x12\x04\xb6\x01\x15\x16b\x06proto3\
";

static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
    ::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
}

pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
    file_descriptor_proto_lazy.get(|| {
        parse_descriptor_proto()
    })
}