# coding=utf-8
# *** WARNING: this file was generated by the Pulumi SDK Generator. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

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

__all__ = [
    'ApplicationCSVMappingParametersArgs',
    'ApplicationInputLambdaProcessorArgs',
    'ApplicationInputParallelismArgs',
    'ApplicationInputProcessingConfigurationArgs',
    'ApplicationInputSchemaArgs',
    'ApplicationInputArgs',
    'ApplicationJSONMappingParametersArgs',
    'ApplicationKinesisFirehoseInputArgs',
    'ApplicationKinesisStreamsInputArgs',
    'ApplicationMappingParametersArgs',
    'ApplicationOutputResourceDestinationSchemaArgs',
    'ApplicationOutputResourceKinesisFirehoseOutputArgs',
    'ApplicationOutputResourceKinesisStreamsOutputArgs',
    'ApplicationOutputResourceLambdaOutputArgs',
    'ApplicationOutputResourceOutputArgs',
    'ApplicationRecordColumnArgs',
    'ApplicationRecordFormatArgs',
    'ApplicationReferenceDataSourceCSVMappingParametersArgs',
    'ApplicationReferenceDataSourceJSONMappingParametersArgs',
    'ApplicationReferenceDataSourceMappingParametersArgs',
    'ApplicationReferenceDataSourceRecordColumnArgs',
    'ApplicationReferenceDataSourceRecordFormatArgs',
    'ApplicationReferenceDataSourceReferenceDataSourceArgs',
    'ApplicationReferenceDataSourceReferenceSchemaArgs',
    'ApplicationReferenceDataSourceS3ReferenceDataSourceArgs',
]

@pulumi.input_type
class ApplicationCSVMappingParametersArgs:
    def __init__(__self__, *,
                 record_column_delimiter: pulumi.Input[str],
                 record_row_delimiter: pulumi.Input[str]):
        pulumi.set(__self__, "record_column_delimiter", record_column_delimiter)
        pulumi.set(__self__, "record_row_delimiter", record_row_delimiter)

    @property
    @pulumi.getter(name="recordColumnDelimiter")
    def record_column_delimiter(self) -> pulumi.Input[str]:
        return pulumi.get(self, "record_column_delimiter")

    @record_column_delimiter.setter
    def record_column_delimiter(self, value: pulumi.Input[str]):
        pulumi.set(self, "record_column_delimiter", value)

    @property
    @pulumi.getter(name="recordRowDelimiter")
    def record_row_delimiter(self) -> pulumi.Input[str]:
        return pulumi.get(self, "record_row_delimiter")

    @record_row_delimiter.setter
    def record_row_delimiter(self, value: pulumi.Input[str]):
        pulumi.set(self, "record_row_delimiter", value)


@pulumi.input_type
class ApplicationInputLambdaProcessorArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceARN")
    def resource_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "resource_arn")

    @resource_arn.setter
    def resource_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_arn", value)

    @property
    @pulumi.getter(name="roleARN")
    def role_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "role_arn")

    @role_arn.setter
    def role_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "role_arn", value)


@pulumi.input_type
class ApplicationInputParallelismArgs:
    def __init__(__self__, *,
                 count: Optional[pulumi.Input[int]] = None):
        if count is not None:
            pulumi.set(__self__, "count", count)

    @property
    @pulumi.getter
    def count(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "count")

    @count.setter
    def count(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "count", value)


@pulumi.input_type
class ApplicationInputProcessingConfigurationArgs:
    def __init__(__self__, *,
                 input_lambda_processor: Optional[pulumi.Input['ApplicationInputLambdaProcessorArgs']] = None):
        if input_lambda_processor is not None:
            pulumi.set(__self__, "input_lambda_processor", input_lambda_processor)

    @property
    @pulumi.getter(name="inputLambdaProcessor")
    def input_lambda_processor(self) -> Optional[pulumi.Input['ApplicationInputLambdaProcessorArgs']]:
        return pulumi.get(self, "input_lambda_processor")

    @input_lambda_processor.setter
    def input_lambda_processor(self, value: Optional[pulumi.Input['ApplicationInputLambdaProcessorArgs']]):
        pulumi.set(self, "input_lambda_processor", value)


@pulumi.input_type
class ApplicationInputSchemaArgs:
    def __init__(__self__, *,
                 record_columns: pulumi.Input[Sequence[pulumi.Input['ApplicationRecordColumnArgs']]],
                 record_format: pulumi.Input['ApplicationRecordFormatArgs'],
                 record_encoding: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "record_columns", record_columns)
        pulumi.set(__self__, "record_format", record_format)
        if record_encoding is not None:
            pulumi.set(__self__, "record_encoding", record_encoding)

    @property
    @pulumi.getter(name="recordColumns")
    def record_columns(self) -> pulumi.Input[Sequence[pulumi.Input['ApplicationRecordColumnArgs']]]:
        return pulumi.get(self, "record_columns")

    @record_columns.setter
    def record_columns(self, value: pulumi.Input[Sequence[pulumi.Input['ApplicationRecordColumnArgs']]]):
        pulumi.set(self, "record_columns", value)

    @property
    @pulumi.getter(name="recordFormat")
    def record_format(self) -> pulumi.Input['ApplicationRecordFormatArgs']:
        return pulumi.get(self, "record_format")

    @record_format.setter
    def record_format(self, value: pulumi.Input['ApplicationRecordFormatArgs']):
        pulumi.set(self, "record_format", value)

    @property
    @pulumi.getter(name="recordEncoding")
    def record_encoding(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "record_encoding")

    @record_encoding.setter
    def record_encoding(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "record_encoding", value)


@pulumi.input_type
class ApplicationInputArgs:
    def __init__(__self__, *,
                 input_schema: pulumi.Input['ApplicationInputSchemaArgs'],
                 name_prefix: pulumi.Input[str],
                 input_parallelism: Optional[pulumi.Input['ApplicationInputParallelismArgs']] = None,
                 input_processing_configuration: Optional[pulumi.Input['ApplicationInputProcessingConfigurationArgs']] = None,
                 kinesis_firehose_input: Optional[pulumi.Input['ApplicationKinesisFirehoseInputArgs']] = None,
                 kinesis_streams_input: Optional[pulumi.Input['ApplicationKinesisStreamsInputArgs']] = None):
        pulumi.set(__self__, "input_schema", input_schema)
        pulumi.set(__self__, "name_prefix", name_prefix)
        if input_parallelism is not None:
            pulumi.set(__self__, "input_parallelism", input_parallelism)
        if input_processing_configuration is not None:
            pulumi.set(__self__, "input_processing_configuration", input_processing_configuration)
        if kinesis_firehose_input is not None:
            pulumi.set(__self__, "kinesis_firehose_input", kinesis_firehose_input)
        if kinesis_streams_input is not None:
            pulumi.set(__self__, "kinesis_streams_input", kinesis_streams_input)

    @property
    @pulumi.getter(name="inputSchema")
    def input_schema(self) -> pulumi.Input['ApplicationInputSchemaArgs']:
        return pulumi.get(self, "input_schema")

    @input_schema.setter
    def input_schema(self, value: pulumi.Input['ApplicationInputSchemaArgs']):
        pulumi.set(self, "input_schema", value)

    @property
    @pulumi.getter(name="namePrefix")
    def name_prefix(self) -> pulumi.Input[str]:
        return pulumi.get(self, "name_prefix")

    @name_prefix.setter
    def name_prefix(self, value: pulumi.Input[str]):
        pulumi.set(self, "name_prefix", value)

    @property
    @pulumi.getter(name="inputParallelism")
    def input_parallelism(self) -> Optional[pulumi.Input['ApplicationInputParallelismArgs']]:
        return pulumi.get(self, "input_parallelism")

    @input_parallelism.setter
    def input_parallelism(self, value: Optional[pulumi.Input['ApplicationInputParallelismArgs']]):
        pulumi.set(self, "input_parallelism", value)

    @property
    @pulumi.getter(name="inputProcessingConfiguration")
    def input_processing_configuration(self) -> Optional[pulumi.Input['ApplicationInputProcessingConfigurationArgs']]:
        return pulumi.get(self, "input_processing_configuration")

    @input_processing_configuration.setter
    def input_processing_configuration(self, value: Optional[pulumi.Input['ApplicationInputProcessingConfigurationArgs']]):
        pulumi.set(self, "input_processing_configuration", value)

    @property
    @pulumi.getter(name="kinesisFirehoseInput")
    def kinesis_firehose_input(self) -> Optional[pulumi.Input['ApplicationKinesisFirehoseInputArgs']]:
        return pulumi.get(self, "kinesis_firehose_input")

    @kinesis_firehose_input.setter
    def kinesis_firehose_input(self, value: Optional[pulumi.Input['ApplicationKinesisFirehoseInputArgs']]):
        pulumi.set(self, "kinesis_firehose_input", value)

    @property
    @pulumi.getter(name="kinesisStreamsInput")
    def kinesis_streams_input(self) -> Optional[pulumi.Input['ApplicationKinesisStreamsInputArgs']]:
        return pulumi.get(self, "kinesis_streams_input")

    @kinesis_streams_input.setter
    def kinesis_streams_input(self, value: Optional[pulumi.Input['ApplicationKinesisStreamsInputArgs']]):
        pulumi.set(self, "kinesis_streams_input", value)


@pulumi.input_type
class ApplicationJSONMappingParametersArgs:
    def __init__(__self__, *,
                 record_row_path: pulumi.Input[str]):
        pulumi.set(__self__, "record_row_path", record_row_path)

    @property
    @pulumi.getter(name="recordRowPath")
    def record_row_path(self) -> pulumi.Input[str]:
        return pulumi.get(self, "record_row_path")

    @record_row_path.setter
    def record_row_path(self, value: pulumi.Input[str]):
        pulumi.set(self, "record_row_path", value)


@pulumi.input_type
class ApplicationKinesisFirehoseInputArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceARN")
    def resource_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "resource_arn")

    @resource_arn.setter
    def resource_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_arn", value)

    @property
    @pulumi.getter(name="roleARN")
    def role_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "role_arn")

    @role_arn.setter
    def role_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "role_arn", value)


@pulumi.input_type
class ApplicationKinesisStreamsInputArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceARN")
    def resource_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "resource_arn")

    @resource_arn.setter
    def resource_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_arn", value)

    @property
    @pulumi.getter(name="roleARN")
    def role_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "role_arn")

    @role_arn.setter
    def role_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "role_arn", value)


@pulumi.input_type
class ApplicationMappingParametersArgs:
    def __init__(__self__, *,
                 c_sv_mapping_parameters: Optional[pulumi.Input['ApplicationCSVMappingParametersArgs']] = None,
                 j_son_mapping_parameters: Optional[pulumi.Input['ApplicationJSONMappingParametersArgs']] = None):
        if c_sv_mapping_parameters is not None:
            pulumi.set(__self__, "c_sv_mapping_parameters", c_sv_mapping_parameters)
        if j_son_mapping_parameters is not None:
            pulumi.set(__self__, "j_son_mapping_parameters", j_son_mapping_parameters)

    @property
    @pulumi.getter(name="cSVMappingParameters")
    def c_sv_mapping_parameters(self) -> Optional[pulumi.Input['ApplicationCSVMappingParametersArgs']]:
        return pulumi.get(self, "c_sv_mapping_parameters")

    @c_sv_mapping_parameters.setter
    def c_sv_mapping_parameters(self, value: Optional[pulumi.Input['ApplicationCSVMappingParametersArgs']]):
        pulumi.set(self, "c_sv_mapping_parameters", value)

    @property
    @pulumi.getter(name="jSONMappingParameters")
    def j_son_mapping_parameters(self) -> Optional[pulumi.Input['ApplicationJSONMappingParametersArgs']]:
        return pulumi.get(self, "j_son_mapping_parameters")

    @j_son_mapping_parameters.setter
    def j_son_mapping_parameters(self, value: Optional[pulumi.Input['ApplicationJSONMappingParametersArgs']]):
        pulumi.set(self, "j_son_mapping_parameters", value)


@pulumi.input_type
class ApplicationOutputResourceDestinationSchemaArgs:
    def __init__(__self__, *,
                 record_format_type: Optional[pulumi.Input[str]] = None):
        if record_format_type is not None:
            pulumi.set(__self__, "record_format_type", record_format_type)

    @property
    @pulumi.getter(name="recordFormatType")
    def record_format_type(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "record_format_type")

    @record_format_type.setter
    def record_format_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "record_format_type", value)


@pulumi.input_type
class ApplicationOutputResourceKinesisFirehoseOutputArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceARN")
    def resource_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "resource_arn")

    @resource_arn.setter
    def resource_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_arn", value)

    @property
    @pulumi.getter(name="roleARN")
    def role_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "role_arn")

    @role_arn.setter
    def role_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "role_arn", value)


@pulumi.input_type
class ApplicationOutputResourceKinesisStreamsOutputArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceARN")
    def resource_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "resource_arn")

    @resource_arn.setter
    def resource_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_arn", value)

    @property
    @pulumi.getter(name="roleARN")
    def role_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "role_arn")

    @role_arn.setter
    def role_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "role_arn", value)


@pulumi.input_type
class ApplicationOutputResourceLambdaOutputArgs:
    def __init__(__self__, *,
                 resource_arn: pulumi.Input[str],
                 role_arn: pulumi.Input[str]):
        pulumi.set(__self__, "resource_arn", resource_arn)
        pulumi.set(__self__, "role_arn", role_arn)

    @property
    @pulumi.getter(name="resourceARN")
    def resource_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "resource_arn")

    @resource_arn.setter
    def resource_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_arn", value)

    @property
    @pulumi.getter(name="roleARN")
    def role_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "role_arn")

    @role_arn.setter
    def role_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "role_arn", value)


@pulumi.input_type
class ApplicationOutputResourceOutputArgs:
    def __init__(__self__, *,
                 destination_schema: pulumi.Input['ApplicationOutputResourceDestinationSchemaArgs'],
                 kinesis_firehose_output: Optional[pulumi.Input['ApplicationOutputResourceKinesisFirehoseOutputArgs']] = None,
                 kinesis_streams_output: Optional[pulumi.Input['ApplicationOutputResourceKinesisStreamsOutputArgs']] = None,
                 lambda_output: Optional[pulumi.Input['ApplicationOutputResourceLambdaOutputArgs']] = None,
                 name: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "destination_schema", destination_schema)
        if kinesis_firehose_output is not None:
            pulumi.set(__self__, "kinesis_firehose_output", kinesis_firehose_output)
        if kinesis_streams_output is not None:
            pulumi.set(__self__, "kinesis_streams_output", kinesis_streams_output)
        if lambda_output is not None:
            pulumi.set(__self__, "lambda_output", lambda_output)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="destinationSchema")
    def destination_schema(self) -> pulumi.Input['ApplicationOutputResourceDestinationSchemaArgs']:
        return pulumi.get(self, "destination_schema")

    @destination_schema.setter
    def destination_schema(self, value: pulumi.Input['ApplicationOutputResourceDestinationSchemaArgs']):
        pulumi.set(self, "destination_schema", value)

    @property
    @pulumi.getter(name="kinesisFirehoseOutput")
    def kinesis_firehose_output(self) -> Optional[pulumi.Input['ApplicationOutputResourceKinesisFirehoseOutputArgs']]:
        return pulumi.get(self, "kinesis_firehose_output")

    @kinesis_firehose_output.setter
    def kinesis_firehose_output(self, value: Optional[pulumi.Input['ApplicationOutputResourceKinesisFirehoseOutputArgs']]):
        pulumi.set(self, "kinesis_firehose_output", value)

    @property
    @pulumi.getter(name="kinesisStreamsOutput")
    def kinesis_streams_output(self) -> Optional[pulumi.Input['ApplicationOutputResourceKinesisStreamsOutputArgs']]:
        return pulumi.get(self, "kinesis_streams_output")

    @kinesis_streams_output.setter
    def kinesis_streams_output(self, value: Optional[pulumi.Input['ApplicationOutputResourceKinesisStreamsOutputArgs']]):
        pulumi.set(self, "kinesis_streams_output", value)

    @property
    @pulumi.getter(name="lambdaOutput")
    def lambda_output(self) -> Optional[pulumi.Input['ApplicationOutputResourceLambdaOutputArgs']]:
        return pulumi.get(self, "lambda_output")

    @lambda_output.setter
    def lambda_output(self, value: Optional[pulumi.Input['ApplicationOutputResourceLambdaOutputArgs']]):
        pulumi.set(self, "lambda_output", value)

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

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class ApplicationRecordColumnArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 sql_type: pulumi.Input[str],
                 mapping: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "sql_type", sql_type)
        if mapping is not None:
            pulumi.set(__self__, "mapping", mapping)

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

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="sqlType")
    def sql_type(self) -> pulumi.Input[str]:
        return pulumi.get(self, "sql_type")

    @sql_type.setter
    def sql_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "sql_type", value)

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

    @mapping.setter
    def mapping(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "mapping", value)


@pulumi.input_type
class ApplicationRecordFormatArgs:
    def __init__(__self__, *,
                 record_format_type: pulumi.Input[str],
                 mapping_parameters: Optional[pulumi.Input['ApplicationMappingParametersArgs']] = None):
        pulumi.set(__self__, "record_format_type", record_format_type)
        if mapping_parameters is not None:
            pulumi.set(__self__, "mapping_parameters", mapping_parameters)

    @property
    @pulumi.getter(name="recordFormatType")
    def record_format_type(self) -> pulumi.Input[str]:
        return pulumi.get(self, "record_format_type")

    @record_format_type.setter
    def record_format_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "record_format_type", value)

    @property
    @pulumi.getter(name="mappingParameters")
    def mapping_parameters(self) -> Optional[pulumi.Input['ApplicationMappingParametersArgs']]:
        return pulumi.get(self, "mapping_parameters")

    @mapping_parameters.setter
    def mapping_parameters(self, value: Optional[pulumi.Input['ApplicationMappingParametersArgs']]):
        pulumi.set(self, "mapping_parameters", value)


@pulumi.input_type
class ApplicationReferenceDataSourceCSVMappingParametersArgs:
    def __init__(__self__, *,
                 record_column_delimiter: pulumi.Input[str],
                 record_row_delimiter: pulumi.Input[str]):
        pulumi.set(__self__, "record_column_delimiter", record_column_delimiter)
        pulumi.set(__self__, "record_row_delimiter", record_row_delimiter)

    @property
    @pulumi.getter(name="recordColumnDelimiter")
    def record_column_delimiter(self) -> pulumi.Input[str]:
        return pulumi.get(self, "record_column_delimiter")

    @record_column_delimiter.setter
    def record_column_delimiter(self, value: pulumi.Input[str]):
        pulumi.set(self, "record_column_delimiter", value)

    @property
    @pulumi.getter(name="recordRowDelimiter")
    def record_row_delimiter(self) -> pulumi.Input[str]:
        return pulumi.get(self, "record_row_delimiter")

    @record_row_delimiter.setter
    def record_row_delimiter(self, value: pulumi.Input[str]):
        pulumi.set(self, "record_row_delimiter", value)


@pulumi.input_type
class ApplicationReferenceDataSourceJSONMappingParametersArgs:
    def __init__(__self__, *,
                 record_row_path: pulumi.Input[str]):
        pulumi.set(__self__, "record_row_path", record_row_path)

    @property
    @pulumi.getter(name="recordRowPath")
    def record_row_path(self) -> pulumi.Input[str]:
        return pulumi.get(self, "record_row_path")

    @record_row_path.setter
    def record_row_path(self, value: pulumi.Input[str]):
        pulumi.set(self, "record_row_path", value)


@pulumi.input_type
class ApplicationReferenceDataSourceMappingParametersArgs:
    def __init__(__self__, *,
                 c_sv_mapping_parameters: Optional[pulumi.Input['ApplicationReferenceDataSourceCSVMappingParametersArgs']] = None,
                 j_son_mapping_parameters: Optional[pulumi.Input['ApplicationReferenceDataSourceJSONMappingParametersArgs']] = None):
        if c_sv_mapping_parameters is not None:
            pulumi.set(__self__, "c_sv_mapping_parameters", c_sv_mapping_parameters)
        if j_son_mapping_parameters is not None:
            pulumi.set(__self__, "j_son_mapping_parameters", j_son_mapping_parameters)

    @property
    @pulumi.getter(name="cSVMappingParameters")
    def c_sv_mapping_parameters(self) -> Optional[pulumi.Input['ApplicationReferenceDataSourceCSVMappingParametersArgs']]:
        return pulumi.get(self, "c_sv_mapping_parameters")

    @c_sv_mapping_parameters.setter
    def c_sv_mapping_parameters(self, value: Optional[pulumi.Input['ApplicationReferenceDataSourceCSVMappingParametersArgs']]):
        pulumi.set(self, "c_sv_mapping_parameters", value)

    @property
    @pulumi.getter(name="jSONMappingParameters")
    def j_son_mapping_parameters(self) -> Optional[pulumi.Input['ApplicationReferenceDataSourceJSONMappingParametersArgs']]:
        return pulumi.get(self, "j_son_mapping_parameters")

    @j_son_mapping_parameters.setter
    def j_son_mapping_parameters(self, value: Optional[pulumi.Input['ApplicationReferenceDataSourceJSONMappingParametersArgs']]):
        pulumi.set(self, "j_son_mapping_parameters", value)


@pulumi.input_type
class ApplicationReferenceDataSourceRecordColumnArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 sql_type: pulumi.Input[str],
                 mapping: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "sql_type", sql_type)
        if mapping is not None:
            pulumi.set(__self__, "mapping", mapping)

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

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="sqlType")
    def sql_type(self) -> pulumi.Input[str]:
        return pulumi.get(self, "sql_type")

    @sql_type.setter
    def sql_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "sql_type", value)

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

    @mapping.setter
    def mapping(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "mapping", value)


@pulumi.input_type
class ApplicationReferenceDataSourceRecordFormatArgs:
    def __init__(__self__, *,
                 record_format_type: pulumi.Input[str],
                 mapping_parameters: Optional[pulumi.Input['ApplicationReferenceDataSourceMappingParametersArgs']] = None):
        pulumi.set(__self__, "record_format_type", record_format_type)
        if mapping_parameters is not None:
            pulumi.set(__self__, "mapping_parameters", mapping_parameters)

    @property
    @pulumi.getter(name="recordFormatType")
    def record_format_type(self) -> pulumi.Input[str]:
        return pulumi.get(self, "record_format_type")

    @record_format_type.setter
    def record_format_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "record_format_type", value)

    @property
    @pulumi.getter(name="mappingParameters")
    def mapping_parameters(self) -> Optional[pulumi.Input['ApplicationReferenceDataSourceMappingParametersArgs']]:
        return pulumi.get(self, "mapping_parameters")

    @mapping_parameters.setter
    def mapping_parameters(self, value: Optional[pulumi.Input['ApplicationReferenceDataSourceMappingParametersArgs']]):
        pulumi.set(self, "mapping_parameters", value)


@pulumi.input_type
class ApplicationReferenceDataSourceReferenceDataSourceArgs:
    def __init__(__self__, *,
                 reference_schema: pulumi.Input['ApplicationReferenceDataSourceReferenceSchemaArgs'],
                 s3_reference_data_source: Optional[pulumi.Input['ApplicationReferenceDataSourceS3ReferenceDataSourceArgs']] = None,
                 table_name: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "reference_schema", reference_schema)
        if s3_reference_data_source is not None:
            pulumi.set(__self__, "s3_reference_data_source", s3_reference_data_source)
        if table_name is not None:
            pulumi.set(__self__, "table_name", table_name)

    @property
    @pulumi.getter(name="referenceSchema")
    def reference_schema(self) -> pulumi.Input['ApplicationReferenceDataSourceReferenceSchemaArgs']:
        return pulumi.get(self, "reference_schema")

    @reference_schema.setter
    def reference_schema(self, value: pulumi.Input['ApplicationReferenceDataSourceReferenceSchemaArgs']):
        pulumi.set(self, "reference_schema", value)

    @property
    @pulumi.getter(name="s3ReferenceDataSource")
    def s3_reference_data_source(self) -> Optional[pulumi.Input['ApplicationReferenceDataSourceS3ReferenceDataSourceArgs']]:
        return pulumi.get(self, "s3_reference_data_source")

    @s3_reference_data_source.setter
    def s3_reference_data_source(self, value: Optional[pulumi.Input['ApplicationReferenceDataSourceS3ReferenceDataSourceArgs']]):
        pulumi.set(self, "s3_reference_data_source", value)

    @property
    @pulumi.getter(name="tableName")
    def table_name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "table_name")

    @table_name.setter
    def table_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "table_name", value)


@pulumi.input_type
class ApplicationReferenceDataSourceReferenceSchemaArgs:
    def __init__(__self__, *,
                 record_columns: pulumi.Input[Sequence[pulumi.Input['ApplicationReferenceDataSourceRecordColumnArgs']]],
                 record_format: pulumi.Input['ApplicationReferenceDataSourceRecordFormatArgs'],
                 record_encoding: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "record_columns", record_columns)
        pulumi.set(__self__, "record_format", record_format)
        if record_encoding is not None:
            pulumi.set(__self__, "record_encoding", record_encoding)

    @property
    @pulumi.getter(name="recordColumns")
    def record_columns(self) -> pulumi.Input[Sequence[pulumi.Input['ApplicationReferenceDataSourceRecordColumnArgs']]]:
        return pulumi.get(self, "record_columns")

    @record_columns.setter
    def record_columns(self, value: pulumi.Input[Sequence[pulumi.Input['ApplicationReferenceDataSourceRecordColumnArgs']]]):
        pulumi.set(self, "record_columns", value)

    @property
    @pulumi.getter(name="recordFormat")
    def record_format(self) -> pulumi.Input['ApplicationReferenceDataSourceRecordFormatArgs']:
        return pulumi.get(self, "record_format")

    @record_format.setter
    def record_format(self, value: pulumi.Input['ApplicationReferenceDataSourceRecordFormatArgs']):
        pulumi.set(self, "record_format", value)

    @property
    @pulumi.getter(name="recordEncoding")
    def record_encoding(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "record_encoding")

    @record_encoding.setter
    def record_encoding(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "record_encoding", value)


@pulumi.input_type
class ApplicationReferenceDataSourceS3ReferenceDataSourceArgs:
    def __init__(__self__, *,
                 bucket_arn: pulumi.Input[str],
                 file_key: pulumi.Input[str],
                 reference_role_arn: pulumi.Input[str]):
        pulumi.set(__self__, "bucket_arn", bucket_arn)
        pulumi.set(__self__, "file_key", file_key)
        pulumi.set(__self__, "reference_role_arn", reference_role_arn)

    @property
    @pulumi.getter(name="bucketARN")
    def bucket_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "bucket_arn")

    @bucket_arn.setter
    def bucket_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket_arn", value)

    @property
    @pulumi.getter(name="fileKey")
    def file_key(self) -> pulumi.Input[str]:
        return pulumi.get(self, "file_key")

    @file_key.setter
    def file_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "file_key", value)

    @property
    @pulumi.getter(name="referenceRoleARN")
    def reference_role_arn(self) -> pulumi.Input[str]:
        return pulumi.get(self, "reference_role_arn")

    @reference_role_arn.setter
    def reference_role_arn(self, value: pulumi.Input[str]):
        pulumi.set(self, "reference_role_arn", value)


