# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs

__all__ = [
    'ApiConfigGatewayConfig',
    'ApiConfigGatewayConfigBackendConfig',
    'ApiConfigGrpcService',
    'ApiConfigGrpcServiceFileDescriptorSet',
    'ApiConfigGrpcServiceSource',
    'ApiConfigIamBindingCondition',
    'ApiConfigIamMemberCondition',
    'ApiConfigManagedServiceConfig',
    'ApiConfigOpenapiDocument',
    'ApiConfigOpenapiDocumentDocument',
    'ApiIamBindingCondition',
    'ApiIamMemberCondition',
    'GatewayIamBindingCondition',
    'GatewayIamMemberCondition',
]

@pulumi.output_type
class ApiConfigGatewayConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendConfig":
            suggest = "backend_config"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ApiConfigGatewayConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ApiConfigGatewayConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ApiConfigGatewayConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 backend_config: 'outputs.ApiConfigGatewayConfigBackendConfig'):
        """
        :param 'ApiConfigGatewayConfigBackendConfigArgs' backend_config: Backend settings that are applied to all backends of the Gateway.
               Structure is documented below.
        """
        pulumi.set(__self__, "backend_config", backend_config)

    @property
    @pulumi.getter(name="backendConfig")
    def backend_config(self) -> 'outputs.ApiConfigGatewayConfigBackendConfig':
        """
        Backend settings that are applied to all backends of the Gateway.
        Structure is documented below.
        """
        return pulumi.get(self, "backend_config")


@pulumi.output_type
class ApiConfigGatewayConfigBackendConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "googleServiceAccount":
            suggest = "google_service_account"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ApiConfigGatewayConfigBackendConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ApiConfigGatewayConfigBackendConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ApiConfigGatewayConfigBackendConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 google_service_account: str):
        """
        :param str google_service_account: Google Cloud IAM service account used to sign OIDC tokens for backends that have authentication configured
               (https://cloud.google.com/service-infrastructure/docs/service-management/reference/rest/v1/services.configs#backend).
        """
        pulumi.set(__self__, "google_service_account", google_service_account)

    @property
    @pulumi.getter(name="googleServiceAccount")
    def google_service_account(self) -> str:
        """
        Google Cloud IAM service account used to sign OIDC tokens for backends that have authentication configured
        (https://cloud.google.com/service-infrastructure/docs/service-management/reference/rest/v1/services.configs#backend).
        """
        return pulumi.get(self, "google_service_account")


@pulumi.output_type
class ApiConfigGrpcService(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "fileDescriptorSet":
            suggest = "file_descriptor_set"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ApiConfigGrpcService. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ApiConfigGrpcService.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ApiConfigGrpcService.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 file_descriptor_set: 'outputs.ApiConfigGrpcServiceFileDescriptorSet',
                 sources: Optional[Sequence['outputs.ApiConfigGrpcServiceSource']] = None):
        """
        :param 'ApiConfigGrpcServiceFileDescriptorSetArgs' file_descriptor_set: Input only. File descriptor set, generated by protoc.
               To generate, use protoc with imports and source info included. For an example test.proto file, the following command would put the value in a new file named out.pb.
               $ protoc --include_imports --include_source_info test.proto -o out.pb
               Structure is documented below.
        :param Sequence['ApiConfigGrpcServiceSourceArgs'] sources: Uncompiled proto files associated with the descriptor set, used for display purposes (server-side compilation is not supported). These should match the inputs to 'protoc' command used to generate fileDescriptorSet.
               Structure is documented below.
        """
        pulumi.set(__self__, "file_descriptor_set", file_descriptor_set)
        if sources is not None:
            pulumi.set(__self__, "sources", sources)

    @property
    @pulumi.getter(name="fileDescriptorSet")
    def file_descriptor_set(self) -> 'outputs.ApiConfigGrpcServiceFileDescriptorSet':
        """
        Input only. File descriptor set, generated by protoc.
        To generate, use protoc with imports and source info included. For an example test.proto file, the following command would put the value in a new file named out.pb.
        $ protoc --include_imports --include_source_info test.proto -o out.pb
        Structure is documented below.
        """
        return pulumi.get(self, "file_descriptor_set")

    @property
    @pulumi.getter
    def sources(self) -> Optional[Sequence['outputs.ApiConfigGrpcServiceSource']]:
        """
        Uncompiled proto files associated with the descriptor set, used for display purposes (server-side compilation is not supported). These should match the inputs to 'protoc' command used to generate fileDescriptorSet.
        Structure is documented below.
        """
        return pulumi.get(self, "sources")


@pulumi.output_type
class ApiConfigGrpcServiceFileDescriptorSet(dict):
    def __init__(__self__, *,
                 contents: str,
                 path: str):
        """
        :param str contents: Base64 encoded content of the file.
        :param str path: The file path (full or relative path). This is typically the path of the file when it is uploaded.
        """
        pulumi.set(__self__, "contents", contents)
        pulumi.set(__self__, "path", path)

    @property
    @pulumi.getter
    def contents(self) -> str:
        """
        Base64 encoded content of the file.
        """
        return pulumi.get(self, "contents")

    @property
    @pulumi.getter
    def path(self) -> str:
        """
        The file path (full or relative path). This is typically the path of the file when it is uploaded.
        """
        return pulumi.get(self, "path")


@pulumi.output_type
class ApiConfigGrpcServiceSource(dict):
    def __init__(__self__, *,
                 contents: str,
                 path: str):
        """
        :param str contents: Base64 encoded content of the file.
        :param str path: The file path (full or relative path). This is typically the path of the file when it is uploaded.
        """
        pulumi.set(__self__, "contents", contents)
        pulumi.set(__self__, "path", path)

    @property
    @pulumi.getter
    def contents(self) -> str:
        """
        Base64 encoded content of the file.
        """
        return pulumi.get(self, "contents")

    @property
    @pulumi.getter
    def path(self) -> str:
        """
        The file path (full or relative path). This is typically the path of the file when it is uploaded.
        """
        return pulumi.get(self, "path")


@pulumi.output_type
class ApiConfigIamBindingCondition(dict):
    def __init__(__self__, *,
                 expression: str,
                 title: str,
                 description: Optional[str] = None):
        pulumi.set(__self__, "expression", expression)
        pulumi.set(__self__, "title", title)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def expression(self) -> str:
        return pulumi.get(self, "expression")

    @property
    @pulumi.getter
    def title(self) -> str:
        return pulumi.get(self, "title")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")


@pulumi.output_type
class ApiConfigIamMemberCondition(dict):
    def __init__(__self__, *,
                 expression: str,
                 title: str,
                 description: Optional[str] = None):
        pulumi.set(__self__, "expression", expression)
        pulumi.set(__self__, "title", title)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def expression(self) -> str:
        return pulumi.get(self, "expression")

    @property
    @pulumi.getter
    def title(self) -> str:
        return pulumi.get(self, "title")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")


@pulumi.output_type
class ApiConfigManagedServiceConfig(dict):
    def __init__(__self__, *,
                 contents: str,
                 path: str):
        """
        :param str contents: Base64 encoded content of the file.
        :param str path: The file path (full or relative path). This is typically the path of the file when it is uploaded.
        """
        pulumi.set(__self__, "contents", contents)
        pulumi.set(__self__, "path", path)

    @property
    @pulumi.getter
    def contents(self) -> str:
        """
        Base64 encoded content of the file.
        """
        return pulumi.get(self, "contents")

    @property
    @pulumi.getter
    def path(self) -> str:
        """
        The file path (full or relative path). This is typically the path of the file when it is uploaded.
        """
        return pulumi.get(self, "path")


@pulumi.output_type
class ApiConfigOpenapiDocument(dict):
    def __init__(__self__, *,
                 document: 'outputs.ApiConfigOpenapiDocumentDocument'):
        """
        :param 'ApiConfigOpenapiDocumentDocumentArgs' document: The OpenAPI Specification document file.
               Structure is documented below.
        """
        pulumi.set(__self__, "document", document)

    @property
    @pulumi.getter
    def document(self) -> 'outputs.ApiConfigOpenapiDocumentDocument':
        """
        The OpenAPI Specification document file.
        Structure is documented below.
        """
        return pulumi.get(self, "document")


@pulumi.output_type
class ApiConfigOpenapiDocumentDocument(dict):
    def __init__(__self__, *,
                 contents: str,
                 path: str):
        """
        :param str contents: Base64 encoded content of the file.
        :param str path: The file path (full or relative path). This is typically the path of the file when it is uploaded.
        """
        pulumi.set(__self__, "contents", contents)
        pulumi.set(__self__, "path", path)

    @property
    @pulumi.getter
    def contents(self) -> str:
        """
        Base64 encoded content of the file.
        """
        return pulumi.get(self, "contents")

    @property
    @pulumi.getter
    def path(self) -> str:
        """
        The file path (full or relative path). This is typically the path of the file when it is uploaded.
        """
        return pulumi.get(self, "path")


@pulumi.output_type
class ApiIamBindingCondition(dict):
    def __init__(__self__, *,
                 expression: str,
                 title: str,
                 description: Optional[str] = None):
        pulumi.set(__self__, "expression", expression)
        pulumi.set(__self__, "title", title)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def expression(self) -> str:
        return pulumi.get(self, "expression")

    @property
    @pulumi.getter
    def title(self) -> str:
        return pulumi.get(self, "title")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")


@pulumi.output_type
class ApiIamMemberCondition(dict):
    def __init__(__self__, *,
                 expression: str,
                 title: str,
                 description: Optional[str] = None):
        pulumi.set(__self__, "expression", expression)
        pulumi.set(__self__, "title", title)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def expression(self) -> str:
        return pulumi.get(self, "expression")

    @property
    @pulumi.getter
    def title(self) -> str:
        return pulumi.get(self, "title")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")


@pulumi.output_type
class GatewayIamBindingCondition(dict):
    def __init__(__self__, *,
                 expression: str,
                 title: str,
                 description: Optional[str] = None):
        pulumi.set(__self__, "expression", expression)
        pulumi.set(__self__, "title", title)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def expression(self) -> str:
        return pulumi.get(self, "expression")

    @property
    @pulumi.getter
    def title(self) -> str:
        return pulumi.get(self, "title")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")


@pulumi.output_type
class GatewayIamMemberCondition(dict):
    def __init__(__self__, *,
                 expression: str,
                 title: str,
                 description: Optional[str] = None):
        pulumi.set(__self__, "expression", expression)
        pulumi.set(__self__, "title", title)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def expression(self) -> str:
        return pulumi.get(self, "expression")

    @property
    @pulumi.getter
    def title(self) -> str:
        return pulumi.get(self, "title")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")


