// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function networkInterfaceAttachmentToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        device_index: cdktf.numberToTerraform(struct.deviceIndex),
        instance: cdktf.stringToTerraform(struct.instance),
    };
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/network_interface aws_network_interface}
*/
export class NetworkInterface extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_network_interface";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/network_interface aws_network_interface} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options NetworkInterfaceConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_network_interface',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._description = config.description;
        this._interfaceType = config.interfaceType;
        this._ipv4PrefixCount = config.ipv4PrefixCount;
        this._ipv4Prefixes = config.ipv4Prefixes;
        this._ipv6AddressCount = config.ipv6AddressCount;
        this._ipv6AddressList = config.ipv6AddressList;
        this._ipv6AddressListEnabled = config.ipv6AddressListEnabled;
        this._ipv6Addresses = config.ipv6Addresses;
        this._ipv6PrefixCount = config.ipv6PrefixCount;
        this._ipv6Prefixes = config.ipv6Prefixes;
        this._privateIp = config.privateIp;
        this._privateIpList = config.privateIpList;
        this._privateIpListEnabled = config.privateIpListEnabled;
        this._privateIps = config.privateIps;
        this._privateIpsCount = config.privateIpsCount;
        this._securityGroups = config.securityGroups;
        this._sourceDestCheck = config.sourceDestCheck;
        this._subnetId = config.subnetId;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._attachment = config.attachment;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // description - computed: false, optional: true, required: false
    _description;
    get description() {
        return this.getStringAttribute('description');
    }
    set description(value) {
        this._description = value;
    }
    resetDescription() {
        this._description = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get descriptionInput() {
        return this._description;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // interface_type - computed: true, optional: true, required: false
    _interfaceType;
    get interfaceType() {
        return this.getStringAttribute('interface_type');
    }
    set interfaceType(value) {
        this._interfaceType = value;
    }
    resetInterfaceType() {
        this._interfaceType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get interfaceTypeInput() {
        return this._interfaceType;
    }
    // ipv4_prefix_count - computed: true, optional: true, required: false
    _ipv4PrefixCount;
    get ipv4PrefixCount() {
        return this.getNumberAttribute('ipv4_prefix_count');
    }
    set ipv4PrefixCount(value) {
        this._ipv4PrefixCount = value;
    }
    resetIpv4PrefixCount() {
        this._ipv4PrefixCount = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipv4PrefixCountInput() {
        return this._ipv4PrefixCount;
    }
    // ipv4_prefixes - computed: true, optional: true, required: false
    _ipv4Prefixes;
    get ipv4Prefixes() {
        return cdktf.Fn.tolist(this.getListAttribute('ipv4_prefixes'));
    }
    set ipv4Prefixes(value) {
        this._ipv4Prefixes = value;
    }
    resetIpv4Prefixes() {
        this._ipv4Prefixes = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipv4PrefixesInput() {
        return this._ipv4Prefixes;
    }
    // ipv6_address_count - computed: true, optional: true, required: false
    _ipv6AddressCount;
    get ipv6AddressCount() {
        return this.getNumberAttribute('ipv6_address_count');
    }
    set ipv6AddressCount(value) {
        this._ipv6AddressCount = value;
    }
    resetIpv6AddressCount() {
        this._ipv6AddressCount = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipv6AddressCountInput() {
        return this._ipv6AddressCount;
    }
    // ipv6_address_list - computed: true, optional: true, required: false
    _ipv6AddressList;
    get ipv6AddressList() {
        return this.getListAttribute('ipv6_address_list');
    }
    set ipv6AddressList(value) {
        this._ipv6AddressList = value;
    }
    resetIpv6AddressList() {
        this._ipv6AddressList = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipv6AddressListInput() {
        return this._ipv6AddressList;
    }
    // ipv6_address_list_enabled - computed: false, optional: true, required: false
    _ipv6AddressListEnabled;
    get ipv6AddressListEnabled() {
        return this.getBooleanAttribute('ipv6_address_list_enabled');
    }
    set ipv6AddressListEnabled(value) {
        this._ipv6AddressListEnabled = value;
    }
    resetIpv6AddressListEnabled() {
        this._ipv6AddressListEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipv6AddressListEnabledInput() {
        return this._ipv6AddressListEnabled;
    }
    // ipv6_addresses - computed: true, optional: true, required: false
    _ipv6Addresses;
    get ipv6Addresses() {
        return cdktf.Fn.tolist(this.getListAttribute('ipv6_addresses'));
    }
    set ipv6Addresses(value) {
        this._ipv6Addresses = value;
    }
    resetIpv6Addresses() {
        this._ipv6Addresses = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipv6AddressesInput() {
        return this._ipv6Addresses;
    }
    // ipv6_prefix_count - computed: true, optional: true, required: false
    _ipv6PrefixCount;
    get ipv6PrefixCount() {
        return this.getNumberAttribute('ipv6_prefix_count');
    }
    set ipv6PrefixCount(value) {
        this._ipv6PrefixCount = value;
    }
    resetIpv6PrefixCount() {
        this._ipv6PrefixCount = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipv6PrefixCountInput() {
        return this._ipv6PrefixCount;
    }
    // ipv6_prefixes - computed: true, optional: true, required: false
    _ipv6Prefixes;
    get ipv6Prefixes() {
        return cdktf.Fn.tolist(this.getListAttribute('ipv6_prefixes'));
    }
    set ipv6Prefixes(value) {
        this._ipv6Prefixes = value;
    }
    resetIpv6Prefixes() {
        this._ipv6Prefixes = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipv6PrefixesInput() {
        return this._ipv6Prefixes;
    }
    // mac_address - computed: true, optional: false, required: false
    get macAddress() {
        return this.getStringAttribute('mac_address');
    }
    // outpost_arn - computed: true, optional: false, required: false
    get outpostArn() {
        return this.getStringAttribute('outpost_arn');
    }
    // owner_id - computed: true, optional: false, required: false
    get ownerId() {
        return this.getStringAttribute('owner_id');
    }
    // private_dns_name - computed: true, optional: false, required: false
    get privateDnsName() {
        return this.getStringAttribute('private_dns_name');
    }
    // private_ip - computed: true, optional: true, required: false
    _privateIp;
    get privateIp() {
        return this.getStringAttribute('private_ip');
    }
    set privateIp(value) {
        this._privateIp = value;
    }
    resetPrivateIp() {
        this._privateIp = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get privateIpInput() {
        return this._privateIp;
    }
    // private_ip_list - computed: true, optional: true, required: false
    _privateIpList;
    get privateIpList() {
        return this.getListAttribute('private_ip_list');
    }
    set privateIpList(value) {
        this._privateIpList = value;
    }
    resetPrivateIpList() {
        this._privateIpList = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get privateIpListInput() {
        return this._privateIpList;
    }
    // private_ip_list_enabled - computed: false, optional: true, required: false
    _privateIpListEnabled;
    get privateIpListEnabled() {
        return this.getBooleanAttribute('private_ip_list_enabled');
    }
    set privateIpListEnabled(value) {
        this._privateIpListEnabled = value;
    }
    resetPrivateIpListEnabled() {
        this._privateIpListEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get privateIpListEnabledInput() {
        return this._privateIpListEnabled;
    }
    // private_ips - computed: true, optional: true, required: false
    _privateIps;
    get privateIps() {
        return cdktf.Fn.tolist(this.getListAttribute('private_ips'));
    }
    set privateIps(value) {
        this._privateIps = value;
    }
    resetPrivateIps() {
        this._privateIps = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get privateIpsInput() {
        return this._privateIps;
    }
    // private_ips_count - computed: true, optional: true, required: false
    _privateIpsCount;
    get privateIpsCount() {
        return this.getNumberAttribute('private_ips_count');
    }
    set privateIpsCount(value) {
        this._privateIpsCount = value;
    }
    resetPrivateIpsCount() {
        this._privateIpsCount = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get privateIpsCountInput() {
        return this._privateIpsCount;
    }
    // security_groups - computed: true, optional: true, required: false
    _securityGroups;
    get securityGroups() {
        return cdktf.Fn.tolist(this.getListAttribute('security_groups'));
    }
    set securityGroups(value) {
        this._securityGroups = value;
    }
    resetSecurityGroups() {
        this._securityGroups = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get securityGroupsInput() {
        return this._securityGroups;
    }
    // source_dest_check - computed: false, optional: true, required: false
    _sourceDestCheck;
    get sourceDestCheck() {
        return this.getBooleanAttribute('source_dest_check');
    }
    set sourceDestCheck(value) {
        this._sourceDestCheck = value;
    }
    resetSourceDestCheck() {
        this._sourceDestCheck = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sourceDestCheckInput() {
        return this._sourceDestCheck;
    }
    // subnet_id - computed: false, optional: false, required: true
    _subnetId;
    get subnetId() {
        return this.getStringAttribute('subnet_id');
    }
    set subnetId(value) {
        this._subnetId = value;
    }
    // Temporarily expose input value. Use with caution.
    get subnetIdInput() {
        return this._subnetId;
    }
    // tags - computed: false, optional: true, required: false
    _tags;
    get tags() {
        return this.getStringMapAttribute('tags');
    }
    set tags(value) {
        this._tags = value;
    }
    resetTags() {
        this._tags = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsInput() {
        return this._tags;
    }
    // tags_all - computed: true, optional: true, required: false
    _tagsAll;
    get tagsAll() {
        return this.getStringMapAttribute('tags_all');
    }
    set tagsAll(value) {
        this._tagsAll = value;
    }
    resetTagsAll() {
        this._tagsAll = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsAllInput() {
        return this._tagsAll;
    }
    // attachment - computed: false, optional: true, required: false
    _attachment;
    get attachment() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('attachment')));
    }
    set attachment(value) {
        this._attachment = value;
    }
    resetAttachment() {
        this._attachment = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get attachmentInput() {
        return this._attachment;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            description: cdktf.stringToTerraform(this._description),
            interface_type: cdktf.stringToTerraform(this._interfaceType),
            ipv4_prefix_count: cdktf.numberToTerraform(this._ipv4PrefixCount),
            ipv4_prefixes: cdktf.listMapper(cdktf.stringToTerraform)(this._ipv4Prefixes),
            ipv6_address_count: cdktf.numberToTerraform(this._ipv6AddressCount),
            ipv6_address_list: cdktf.listMapper(cdktf.stringToTerraform)(this._ipv6AddressList),
            ipv6_address_list_enabled: cdktf.booleanToTerraform(this._ipv6AddressListEnabled),
            ipv6_addresses: cdktf.listMapper(cdktf.stringToTerraform)(this._ipv6Addresses),
            ipv6_prefix_count: cdktf.numberToTerraform(this._ipv6PrefixCount),
            ipv6_prefixes: cdktf.listMapper(cdktf.stringToTerraform)(this._ipv6Prefixes),
            private_ip: cdktf.stringToTerraform(this._privateIp),
            private_ip_list: cdktf.listMapper(cdktf.stringToTerraform)(this._privateIpList),
            private_ip_list_enabled: cdktf.booleanToTerraform(this._privateIpListEnabled),
            private_ips: cdktf.listMapper(cdktf.stringToTerraform)(this._privateIps),
            private_ips_count: cdktf.numberToTerraform(this._privateIpsCount),
            security_groups: cdktf.listMapper(cdktf.stringToTerraform)(this._securityGroups),
            source_dest_check: cdktf.booleanToTerraform(this._sourceDestCheck),
            subnet_id: cdktf.stringToTerraform(this._subnetId),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            attachment: cdktf.listMapper(networkInterfaceAttachmentToTerraform)(this._attachment),
        };
    }
}
//# sourceMappingURL=network-interface.js.map