// generated from terraform resource schema
import * as cdktf from 'cdktf';
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/ec2_capacity_reservation aws_ec2_capacity_reservation}
*/
export class Ec2CapacityReservation extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_ec2_capacity_reservation";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/ec2_capacity_reservation aws_ec2_capacity_reservation} 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 Ec2CapacityReservationConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_ec2_capacity_reservation',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._availabilityZone = config.availabilityZone;
        this._ebsOptimized = config.ebsOptimized;
        this._endDate = config.endDate;
        this._endDateType = config.endDateType;
        this._ephemeralStorage = config.ephemeralStorage;
        this._instanceCount = config.instanceCount;
        this._instanceMatchCriteria = config.instanceMatchCriteria;
        this._instancePlatform = config.instancePlatform;
        this._instanceType = config.instanceType;
        this._outpostArn = config.outpostArn;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._tenancy = config.tenancy;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // availability_zone - computed: false, optional: false, required: true
    _availabilityZone;
    get availabilityZone() {
        return this.getStringAttribute('availability_zone');
    }
    set availabilityZone(value) {
        this._availabilityZone = value;
    }
    // Temporarily expose input value. Use with caution.
    get availabilityZoneInput() {
        return this._availabilityZone;
    }
    // ebs_optimized - computed: false, optional: true, required: false
    _ebsOptimized;
    get ebsOptimized() {
        return this.getBooleanAttribute('ebs_optimized');
    }
    set ebsOptimized(value) {
        this._ebsOptimized = value;
    }
    resetEbsOptimized() {
        this._ebsOptimized = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ebsOptimizedInput() {
        return this._ebsOptimized;
    }
    // end_date - computed: false, optional: true, required: false
    _endDate;
    get endDate() {
        return this.getStringAttribute('end_date');
    }
    set endDate(value) {
        this._endDate = value;
    }
    resetEndDate() {
        this._endDate = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get endDateInput() {
        return this._endDate;
    }
    // end_date_type - computed: false, optional: true, required: false
    _endDateType;
    get endDateType() {
        return this.getStringAttribute('end_date_type');
    }
    set endDateType(value) {
        this._endDateType = value;
    }
    resetEndDateType() {
        this._endDateType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get endDateTypeInput() {
        return this._endDateType;
    }
    // ephemeral_storage - computed: false, optional: true, required: false
    _ephemeralStorage;
    get ephemeralStorage() {
        return this.getBooleanAttribute('ephemeral_storage');
    }
    set ephemeralStorage(value) {
        this._ephemeralStorage = value;
    }
    resetEphemeralStorage() {
        this._ephemeralStorage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ephemeralStorageInput() {
        return this._ephemeralStorage;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // instance_count - computed: false, optional: false, required: true
    _instanceCount;
    get instanceCount() {
        return this.getNumberAttribute('instance_count');
    }
    set instanceCount(value) {
        this._instanceCount = value;
    }
    // Temporarily expose input value. Use with caution.
    get instanceCountInput() {
        return this._instanceCount;
    }
    // instance_match_criteria - computed: false, optional: true, required: false
    _instanceMatchCriteria;
    get instanceMatchCriteria() {
        return this.getStringAttribute('instance_match_criteria');
    }
    set instanceMatchCriteria(value) {
        this._instanceMatchCriteria = value;
    }
    resetInstanceMatchCriteria() {
        this._instanceMatchCriteria = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get instanceMatchCriteriaInput() {
        return this._instanceMatchCriteria;
    }
    // instance_platform - computed: false, optional: false, required: true
    _instancePlatform;
    get instancePlatform() {
        return this.getStringAttribute('instance_platform');
    }
    set instancePlatform(value) {
        this._instancePlatform = value;
    }
    // Temporarily expose input value. Use with caution.
    get instancePlatformInput() {
        return this._instancePlatform;
    }
    // instance_type - computed: false, optional: false, required: true
    _instanceType;
    get instanceType() {
        return this.getStringAttribute('instance_type');
    }
    set instanceType(value) {
        this._instanceType = value;
    }
    // Temporarily expose input value. Use with caution.
    get instanceTypeInput() {
        return this._instanceType;
    }
    // outpost_arn - computed: false, optional: true, required: false
    _outpostArn;
    get outpostArn() {
        return this.getStringAttribute('outpost_arn');
    }
    set outpostArn(value) {
        this._outpostArn = value;
    }
    resetOutpostArn() {
        this._outpostArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get outpostArnInput() {
        return this._outpostArn;
    }
    // owner_id - computed: true, optional: false, required: false
    get ownerId() {
        return this.getStringAttribute('owner_id');
    }
    // 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;
    }
    // tenancy - computed: false, optional: true, required: false
    _tenancy;
    get tenancy() {
        return this.getStringAttribute('tenancy');
    }
    set tenancy(value) {
        this._tenancy = value;
    }
    resetTenancy() {
        this._tenancy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tenancyInput() {
        return this._tenancy;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            availability_zone: cdktf.stringToTerraform(this._availabilityZone),
            ebs_optimized: cdktf.booleanToTerraform(this._ebsOptimized),
            end_date: cdktf.stringToTerraform(this._endDate),
            end_date_type: cdktf.stringToTerraform(this._endDateType),
            ephemeral_storage: cdktf.booleanToTerraform(this._ephemeralStorage),
            instance_count: cdktf.numberToTerraform(this._instanceCount),
            instance_match_criteria: cdktf.stringToTerraform(this._instanceMatchCriteria),
            instance_platform: cdktf.stringToTerraform(this._instancePlatform),
            instance_type: cdktf.stringToTerraform(this._instanceType),
            outpost_arn: cdktf.stringToTerraform(this._outpostArn),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            tenancy: cdktf.stringToTerraform(this._tenancy),
        };
    }
}
//# sourceMappingURL=ec2-capacity-reservation.js.map