// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function codebuildProjectArtifactsToTerraform(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 {
        artifact_identifier: cdktf.stringToTerraform(struct.artifactIdentifier),
        bucket_owner_access: cdktf.stringToTerraform(struct.bucketOwnerAccess),
        encryption_disabled: cdktf.booleanToTerraform(struct.encryptionDisabled),
        location: cdktf.stringToTerraform(struct.location),
        name: cdktf.stringToTerraform(struct.name),
        namespace_type: cdktf.stringToTerraform(struct.namespaceType),
        override_artifact_name: cdktf.booleanToTerraform(struct.overrideArtifactName),
        packaging: cdktf.stringToTerraform(struct.packaging),
        path: cdktf.stringToTerraform(struct.path),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export class CodebuildProjectArtifactsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._artifactIdentifier !== undefined) {
            hasAnyValues = true;
            internalValueResult.artifactIdentifier = this._artifactIdentifier;
        }
        if (this._bucketOwnerAccess !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucketOwnerAccess = this._bucketOwnerAccess;
        }
        if (this._encryptionDisabled !== undefined) {
            hasAnyValues = true;
            internalValueResult.encryptionDisabled = this._encryptionDisabled;
        }
        if (this._location !== undefined) {
            hasAnyValues = true;
            internalValueResult.location = this._location;
        }
        if (this._name !== undefined) {
            hasAnyValues = true;
            internalValueResult.name = this._name;
        }
        if (this._namespaceType !== undefined) {
            hasAnyValues = true;
            internalValueResult.namespaceType = this._namespaceType;
        }
        if (this._overrideArtifactName !== undefined) {
            hasAnyValues = true;
            internalValueResult.overrideArtifactName = this._overrideArtifactName;
        }
        if (this._packaging !== undefined) {
            hasAnyValues = true;
            internalValueResult.packaging = this._packaging;
        }
        if (this._path !== undefined) {
            hasAnyValues = true;
            internalValueResult.path = this._path;
        }
        if (this._type !== undefined) {
            hasAnyValues = true;
            internalValueResult.type = this._type;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._artifactIdentifier = undefined;
            this._bucketOwnerAccess = undefined;
            this._encryptionDisabled = undefined;
            this._location = undefined;
            this._name = undefined;
            this._namespaceType = undefined;
            this._overrideArtifactName = undefined;
            this._packaging = undefined;
            this._path = undefined;
            this._type = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._artifactIdentifier = value.artifactIdentifier;
            this._bucketOwnerAccess = value.bucketOwnerAccess;
            this._encryptionDisabled = value.encryptionDisabled;
            this._location = value.location;
            this._name = value.name;
            this._namespaceType = value.namespaceType;
            this._overrideArtifactName = value.overrideArtifactName;
            this._packaging = value.packaging;
            this._path = value.path;
            this._type = value.type;
        }
    }
    // artifact_identifier - computed: false, optional: true, required: false
    _artifactIdentifier;
    get artifactIdentifier() {
        return this.getStringAttribute('artifact_identifier');
    }
    set artifactIdentifier(value) {
        this._artifactIdentifier = value;
    }
    resetArtifactIdentifier() {
        this._artifactIdentifier = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get artifactIdentifierInput() {
        return this._artifactIdentifier;
    }
    // bucket_owner_access - computed: false, optional: true, required: false
    _bucketOwnerAccess;
    get bucketOwnerAccess() {
        return this.getStringAttribute('bucket_owner_access');
    }
    set bucketOwnerAccess(value) {
        this._bucketOwnerAccess = value;
    }
    resetBucketOwnerAccess() {
        this._bucketOwnerAccess = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get bucketOwnerAccessInput() {
        return this._bucketOwnerAccess;
    }
    // encryption_disabled - computed: false, optional: true, required: false
    _encryptionDisabled;
    get encryptionDisabled() {
        return this.getBooleanAttribute('encryption_disabled');
    }
    set encryptionDisabled(value) {
        this._encryptionDisabled = value;
    }
    resetEncryptionDisabled() {
        this._encryptionDisabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get encryptionDisabledInput() {
        return this._encryptionDisabled;
    }
    // location - computed: false, optional: true, required: false
    _location;
    get location() {
        return this.getStringAttribute('location');
    }
    set location(value) {
        this._location = value;
    }
    resetLocation() {
        this._location = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get locationInput() {
        return this._location;
    }
    // name - computed: false, optional: true, required: false
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    resetName() {
        this._name = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // namespace_type - computed: false, optional: true, required: false
    _namespaceType;
    get namespaceType() {
        return this.getStringAttribute('namespace_type');
    }
    set namespaceType(value) {
        this._namespaceType = value;
    }
    resetNamespaceType() {
        this._namespaceType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get namespaceTypeInput() {
        return this._namespaceType;
    }
    // override_artifact_name - computed: false, optional: true, required: false
    _overrideArtifactName;
    get overrideArtifactName() {
        return this.getBooleanAttribute('override_artifact_name');
    }
    set overrideArtifactName(value) {
        this._overrideArtifactName = value;
    }
    resetOverrideArtifactName() {
        this._overrideArtifactName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get overrideArtifactNameInput() {
        return this._overrideArtifactName;
    }
    // packaging - computed: false, optional: true, required: false
    _packaging;
    get packaging() {
        return this.getStringAttribute('packaging');
    }
    set packaging(value) {
        this._packaging = value;
    }
    resetPackaging() {
        this._packaging = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get packagingInput() {
        return this._packaging;
    }
    // path - computed: false, optional: true, required: false
    _path;
    get path() {
        return this.getStringAttribute('path');
    }
    set path(value) {
        this._path = value;
    }
    resetPath() {
        this._path = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get pathInput() {
        return this._path;
    }
    // type - computed: false, optional: false, required: true
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
}
export function codebuildProjectBuildBatchConfigRestrictionsToTerraform(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 {
        compute_types_allowed: cdktf.listMapper(cdktf.stringToTerraform)(struct.computeTypesAllowed),
        maximum_builds_allowed: cdktf.numberToTerraform(struct.maximumBuildsAllowed),
    };
}
export class CodebuildProjectBuildBatchConfigRestrictionsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._computeTypesAllowed !== undefined) {
            hasAnyValues = true;
            internalValueResult.computeTypesAllowed = this._computeTypesAllowed;
        }
        if (this._maximumBuildsAllowed !== undefined) {
            hasAnyValues = true;
            internalValueResult.maximumBuildsAllowed = this._maximumBuildsAllowed;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._computeTypesAllowed = undefined;
            this._maximumBuildsAllowed = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._computeTypesAllowed = value.computeTypesAllowed;
            this._maximumBuildsAllowed = value.maximumBuildsAllowed;
        }
    }
    // compute_types_allowed - computed: false, optional: true, required: false
    _computeTypesAllowed;
    get computeTypesAllowed() {
        return this.getListAttribute('compute_types_allowed');
    }
    set computeTypesAllowed(value) {
        this._computeTypesAllowed = value;
    }
    resetComputeTypesAllowed() {
        this._computeTypesAllowed = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get computeTypesAllowedInput() {
        return this._computeTypesAllowed;
    }
    // maximum_builds_allowed - computed: false, optional: true, required: false
    _maximumBuildsAllowed;
    get maximumBuildsAllowed() {
        return this.getNumberAttribute('maximum_builds_allowed');
    }
    set maximumBuildsAllowed(value) {
        this._maximumBuildsAllowed = value;
    }
    resetMaximumBuildsAllowed() {
        this._maximumBuildsAllowed = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get maximumBuildsAllowedInput() {
        return this._maximumBuildsAllowed;
    }
}
export function codebuildProjectBuildBatchConfigToTerraform(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 {
        combine_artifacts: cdktf.booleanToTerraform(struct.combineArtifacts),
        service_role: cdktf.stringToTerraform(struct.serviceRole),
        timeout_in_mins: cdktf.numberToTerraform(struct.timeoutInMins),
        restrictions: codebuildProjectBuildBatchConfigRestrictionsToTerraform(struct.restrictions),
    };
}
export class CodebuildProjectBuildBatchConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._combineArtifacts !== undefined) {
            hasAnyValues = true;
            internalValueResult.combineArtifacts = this._combineArtifacts;
        }
        if (this._serviceRole !== undefined) {
            hasAnyValues = true;
            internalValueResult.serviceRole = this._serviceRole;
        }
        if (this._timeoutInMins !== undefined) {
            hasAnyValues = true;
            internalValueResult.timeoutInMins = this._timeoutInMins;
        }
        if (this._restrictions?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.restrictions = this._restrictions?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._combineArtifacts = undefined;
            this._serviceRole = undefined;
            this._timeoutInMins = undefined;
            this._restrictions.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._combineArtifacts = value.combineArtifacts;
            this._serviceRole = value.serviceRole;
            this._timeoutInMins = value.timeoutInMins;
            this._restrictions.internalValue = value.restrictions;
        }
    }
    // combine_artifacts - computed: false, optional: true, required: false
    _combineArtifacts;
    get combineArtifacts() {
        return this.getBooleanAttribute('combine_artifacts');
    }
    set combineArtifacts(value) {
        this._combineArtifacts = value;
    }
    resetCombineArtifacts() {
        this._combineArtifacts = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get combineArtifactsInput() {
        return this._combineArtifacts;
    }
    // service_role - computed: false, optional: false, required: true
    _serviceRole;
    get serviceRole() {
        return this.getStringAttribute('service_role');
    }
    set serviceRole(value) {
        this._serviceRole = value;
    }
    // Temporarily expose input value. Use with caution.
    get serviceRoleInput() {
        return this._serviceRole;
    }
    // timeout_in_mins - computed: false, optional: true, required: false
    _timeoutInMins;
    get timeoutInMins() {
        return this.getNumberAttribute('timeout_in_mins');
    }
    set timeoutInMins(value) {
        this._timeoutInMins = value;
    }
    resetTimeoutInMins() {
        this._timeoutInMins = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get timeoutInMinsInput() {
        return this._timeoutInMins;
    }
    // restrictions - computed: false, optional: true, required: false
    _restrictions = new CodebuildProjectBuildBatchConfigRestrictionsOutputReference(this, "restrictions", true);
    get restrictions() {
        return this._restrictions;
    }
    putRestrictions(value) {
        this._restrictions.internalValue = value;
    }
    resetRestrictions() {
        this._restrictions.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get restrictionsInput() {
        return this._restrictions.internalValue;
    }
}
export function codebuildProjectCacheToTerraform(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 {
        location: cdktf.stringToTerraform(struct.location),
        modes: cdktf.listMapper(cdktf.stringToTerraform)(struct.modes),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export class CodebuildProjectCacheOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._location !== undefined) {
            hasAnyValues = true;
            internalValueResult.location = this._location;
        }
        if (this._modes !== undefined) {
            hasAnyValues = true;
            internalValueResult.modes = this._modes;
        }
        if (this._type !== undefined) {
            hasAnyValues = true;
            internalValueResult.type = this._type;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._location = undefined;
            this._modes = undefined;
            this._type = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._location = value.location;
            this._modes = value.modes;
            this._type = value.type;
        }
    }
    // location - computed: false, optional: true, required: false
    _location;
    get location() {
        return this.getStringAttribute('location');
    }
    set location(value) {
        this._location = value;
    }
    resetLocation() {
        this._location = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get locationInput() {
        return this._location;
    }
    // modes - computed: false, optional: true, required: false
    _modes;
    get modes() {
        return this.getListAttribute('modes');
    }
    set modes(value) {
        this._modes = value;
    }
    resetModes() {
        this._modes = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get modesInput() {
        return this._modes;
    }
    // type - computed: false, optional: true, required: false
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    resetType() {
        this._type = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
}
export function codebuildProjectEnvironmentEnvironmentVariableToTerraform(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 {
        name: cdktf.stringToTerraform(struct.name),
        type: cdktf.stringToTerraform(struct.type),
        value: cdktf.stringToTerraform(struct.value),
    };
}
export function codebuildProjectEnvironmentRegistryCredentialToTerraform(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 {
        credential: cdktf.stringToTerraform(struct.credential),
        credential_provider: cdktf.stringToTerraform(struct.credentialProvider),
    };
}
export class CodebuildProjectEnvironmentRegistryCredentialOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._credential !== undefined) {
            hasAnyValues = true;
            internalValueResult.credential = this._credential;
        }
        if (this._credentialProvider !== undefined) {
            hasAnyValues = true;
            internalValueResult.credentialProvider = this._credentialProvider;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._credential = undefined;
            this._credentialProvider = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._credential = value.credential;
            this._credentialProvider = value.credentialProvider;
        }
    }
    // credential - computed: false, optional: false, required: true
    _credential;
    get credential() {
        return this.getStringAttribute('credential');
    }
    set credential(value) {
        this._credential = value;
    }
    // Temporarily expose input value. Use with caution.
    get credentialInput() {
        return this._credential;
    }
    // credential_provider - computed: false, optional: false, required: true
    _credentialProvider;
    get credentialProvider() {
        return this.getStringAttribute('credential_provider');
    }
    set credentialProvider(value) {
        this._credentialProvider = value;
    }
    // Temporarily expose input value. Use with caution.
    get credentialProviderInput() {
        return this._credentialProvider;
    }
}
export function codebuildProjectEnvironmentToTerraform(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 {
        certificate: cdktf.stringToTerraform(struct.certificate),
        compute_type: cdktf.stringToTerraform(struct.computeType),
        image: cdktf.stringToTerraform(struct.image),
        image_pull_credentials_type: cdktf.stringToTerraform(struct.imagePullCredentialsType),
        privileged_mode: cdktf.booleanToTerraform(struct.privilegedMode),
        type: cdktf.stringToTerraform(struct.type),
        environment_variable: cdktf.listMapper(codebuildProjectEnvironmentEnvironmentVariableToTerraform)(struct.environmentVariable),
        registry_credential: codebuildProjectEnvironmentRegistryCredentialToTerraform(struct.registryCredential),
    };
}
export class CodebuildProjectEnvironmentOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._certificate !== undefined) {
            hasAnyValues = true;
            internalValueResult.certificate = this._certificate;
        }
        if (this._computeType !== undefined) {
            hasAnyValues = true;
            internalValueResult.computeType = this._computeType;
        }
        if (this._image !== undefined) {
            hasAnyValues = true;
            internalValueResult.image = this._image;
        }
        if (this._imagePullCredentialsType !== undefined) {
            hasAnyValues = true;
            internalValueResult.imagePullCredentialsType = this._imagePullCredentialsType;
        }
        if (this._privilegedMode !== undefined) {
            hasAnyValues = true;
            internalValueResult.privilegedMode = this._privilegedMode;
        }
        if (this._type !== undefined) {
            hasAnyValues = true;
            internalValueResult.type = this._type;
        }
        if (this._environmentVariable !== undefined) {
            hasAnyValues = true;
            internalValueResult.environmentVariable = this._environmentVariable;
        }
        if (this._registryCredential?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.registryCredential = this._registryCredential?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._certificate = undefined;
            this._computeType = undefined;
            this._image = undefined;
            this._imagePullCredentialsType = undefined;
            this._privilegedMode = undefined;
            this._type = undefined;
            this._environmentVariable = undefined;
            this._registryCredential.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._certificate = value.certificate;
            this._computeType = value.computeType;
            this._image = value.image;
            this._imagePullCredentialsType = value.imagePullCredentialsType;
            this._privilegedMode = value.privilegedMode;
            this._type = value.type;
            this._environmentVariable = value.environmentVariable;
            this._registryCredential.internalValue = value.registryCredential;
        }
    }
    // certificate - computed: false, optional: true, required: false
    _certificate;
    get certificate() {
        return this.getStringAttribute('certificate');
    }
    set certificate(value) {
        this._certificate = value;
    }
    resetCertificate() {
        this._certificate = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get certificateInput() {
        return this._certificate;
    }
    // compute_type - computed: false, optional: false, required: true
    _computeType;
    get computeType() {
        return this.getStringAttribute('compute_type');
    }
    set computeType(value) {
        this._computeType = value;
    }
    // Temporarily expose input value. Use with caution.
    get computeTypeInput() {
        return this._computeType;
    }
    // image - computed: false, optional: false, required: true
    _image;
    get image() {
        return this.getStringAttribute('image');
    }
    set image(value) {
        this._image = value;
    }
    // Temporarily expose input value. Use with caution.
    get imageInput() {
        return this._image;
    }
    // image_pull_credentials_type - computed: false, optional: true, required: false
    _imagePullCredentialsType;
    get imagePullCredentialsType() {
        return this.getStringAttribute('image_pull_credentials_type');
    }
    set imagePullCredentialsType(value) {
        this._imagePullCredentialsType = value;
    }
    resetImagePullCredentialsType() {
        this._imagePullCredentialsType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get imagePullCredentialsTypeInput() {
        return this._imagePullCredentialsType;
    }
    // privileged_mode - computed: false, optional: true, required: false
    _privilegedMode;
    get privilegedMode() {
        return this.getBooleanAttribute('privileged_mode');
    }
    set privilegedMode(value) {
        this._privilegedMode = value;
    }
    resetPrivilegedMode() {
        this._privilegedMode = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get privilegedModeInput() {
        return this._privilegedMode;
    }
    // type - computed: false, optional: false, required: true
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
    // environment_variable - computed: false, optional: true, required: false
    _environmentVariable;
    get environmentVariable() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('environment_variable');
    }
    set environmentVariable(value) {
        this._environmentVariable = value;
    }
    resetEnvironmentVariable() {
        this._environmentVariable = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get environmentVariableInput() {
        return this._environmentVariable;
    }
    // registry_credential - computed: false, optional: true, required: false
    _registryCredential = new CodebuildProjectEnvironmentRegistryCredentialOutputReference(this, "registry_credential", true);
    get registryCredential() {
        return this._registryCredential;
    }
    putRegistryCredential(value) {
        this._registryCredential.internalValue = value;
    }
    resetRegistryCredential() {
        this._registryCredential.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get registryCredentialInput() {
        return this._registryCredential.internalValue;
    }
}
export function codebuildProjectFileSystemLocationsToTerraform(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 {
        identifier: cdktf.stringToTerraform(struct.identifier),
        location: cdktf.stringToTerraform(struct.location),
        mount_options: cdktf.stringToTerraform(struct.mountOptions),
        mount_point: cdktf.stringToTerraform(struct.mountPoint),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export function codebuildProjectLogsConfigCloudwatchLogsToTerraform(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 {
        group_name: cdktf.stringToTerraform(struct.groupName),
        status: cdktf.stringToTerraform(struct.status),
        stream_name: cdktf.stringToTerraform(struct.streamName),
    };
}
export class CodebuildProjectLogsConfigCloudwatchLogsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._groupName !== undefined) {
            hasAnyValues = true;
            internalValueResult.groupName = this._groupName;
        }
        if (this._status !== undefined) {
            hasAnyValues = true;
            internalValueResult.status = this._status;
        }
        if (this._streamName !== undefined) {
            hasAnyValues = true;
            internalValueResult.streamName = this._streamName;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._groupName = undefined;
            this._status = undefined;
            this._streamName = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._groupName = value.groupName;
            this._status = value.status;
            this._streamName = value.streamName;
        }
    }
    // group_name - computed: false, optional: true, required: false
    _groupName;
    get groupName() {
        return this.getStringAttribute('group_name');
    }
    set groupName(value) {
        this._groupName = value;
    }
    resetGroupName() {
        this._groupName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get groupNameInput() {
        return this._groupName;
    }
    // status - computed: false, optional: true, required: false
    _status;
    get status() {
        return this.getStringAttribute('status');
    }
    set status(value) {
        this._status = value;
    }
    resetStatus() {
        this._status = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get statusInput() {
        return this._status;
    }
    // stream_name - computed: false, optional: true, required: false
    _streamName;
    get streamName() {
        return this.getStringAttribute('stream_name');
    }
    set streamName(value) {
        this._streamName = value;
    }
    resetStreamName() {
        this._streamName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get streamNameInput() {
        return this._streamName;
    }
}
export function codebuildProjectLogsConfigS3LogsToTerraform(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 {
        bucket_owner_access: cdktf.stringToTerraform(struct.bucketOwnerAccess),
        encryption_disabled: cdktf.booleanToTerraform(struct.encryptionDisabled),
        location: cdktf.stringToTerraform(struct.location),
        status: cdktf.stringToTerraform(struct.status),
    };
}
export class CodebuildProjectLogsConfigS3LogsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._bucketOwnerAccess !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucketOwnerAccess = this._bucketOwnerAccess;
        }
        if (this._encryptionDisabled !== undefined) {
            hasAnyValues = true;
            internalValueResult.encryptionDisabled = this._encryptionDisabled;
        }
        if (this._location !== undefined) {
            hasAnyValues = true;
            internalValueResult.location = this._location;
        }
        if (this._status !== undefined) {
            hasAnyValues = true;
            internalValueResult.status = this._status;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._bucketOwnerAccess = undefined;
            this._encryptionDisabled = undefined;
            this._location = undefined;
            this._status = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._bucketOwnerAccess = value.bucketOwnerAccess;
            this._encryptionDisabled = value.encryptionDisabled;
            this._location = value.location;
            this._status = value.status;
        }
    }
    // bucket_owner_access - computed: false, optional: true, required: false
    _bucketOwnerAccess;
    get bucketOwnerAccess() {
        return this.getStringAttribute('bucket_owner_access');
    }
    set bucketOwnerAccess(value) {
        this._bucketOwnerAccess = value;
    }
    resetBucketOwnerAccess() {
        this._bucketOwnerAccess = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get bucketOwnerAccessInput() {
        return this._bucketOwnerAccess;
    }
    // encryption_disabled - computed: false, optional: true, required: false
    _encryptionDisabled;
    get encryptionDisabled() {
        return this.getBooleanAttribute('encryption_disabled');
    }
    set encryptionDisabled(value) {
        this._encryptionDisabled = value;
    }
    resetEncryptionDisabled() {
        this._encryptionDisabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get encryptionDisabledInput() {
        return this._encryptionDisabled;
    }
    // location - computed: false, optional: true, required: false
    _location;
    get location() {
        return this.getStringAttribute('location');
    }
    set location(value) {
        this._location = value;
    }
    resetLocation() {
        this._location = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get locationInput() {
        return this._location;
    }
    // status - computed: false, optional: true, required: false
    _status;
    get status() {
        return this.getStringAttribute('status');
    }
    set status(value) {
        this._status = value;
    }
    resetStatus() {
        this._status = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get statusInput() {
        return this._status;
    }
}
export function codebuildProjectLogsConfigToTerraform(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 {
        cloudwatch_logs: codebuildProjectLogsConfigCloudwatchLogsToTerraform(struct.cloudwatchLogs),
        s3_logs: codebuildProjectLogsConfigS3LogsToTerraform(struct.s3Logs),
    };
}
export class CodebuildProjectLogsConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._cloudwatchLogs?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.cloudwatchLogs = this._cloudwatchLogs?.internalValue;
        }
        if (this._s3Logs?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.s3Logs = this._s3Logs?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._cloudwatchLogs.internalValue = undefined;
            this._s3Logs.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._cloudwatchLogs.internalValue = value.cloudwatchLogs;
            this._s3Logs.internalValue = value.s3Logs;
        }
    }
    // cloudwatch_logs - computed: false, optional: true, required: false
    _cloudwatchLogs = new CodebuildProjectLogsConfigCloudwatchLogsOutputReference(this, "cloudwatch_logs", true);
    get cloudwatchLogs() {
        return this._cloudwatchLogs;
    }
    putCloudwatchLogs(value) {
        this._cloudwatchLogs.internalValue = value;
    }
    resetCloudwatchLogs() {
        this._cloudwatchLogs.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cloudwatchLogsInput() {
        return this._cloudwatchLogs.internalValue;
    }
    // s3_logs - computed: false, optional: true, required: false
    _s3Logs = new CodebuildProjectLogsConfigS3LogsOutputReference(this, "s3_logs", true);
    get s3Logs() {
        return this._s3Logs;
    }
    putS3Logs(value) {
        this._s3Logs.internalValue = value;
    }
    resetS3Logs() {
        this._s3Logs.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get s3LogsInput() {
        return this._s3Logs.internalValue;
    }
}
export function codebuildProjectSecondaryArtifactsToTerraform(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 {
        artifact_identifier: cdktf.stringToTerraform(struct.artifactIdentifier),
        bucket_owner_access: cdktf.stringToTerraform(struct.bucketOwnerAccess),
        encryption_disabled: cdktf.booleanToTerraform(struct.encryptionDisabled),
        location: cdktf.stringToTerraform(struct.location),
        name: cdktf.stringToTerraform(struct.name),
        namespace_type: cdktf.stringToTerraform(struct.namespaceType),
        override_artifact_name: cdktf.booleanToTerraform(struct.overrideArtifactName),
        packaging: cdktf.stringToTerraform(struct.packaging),
        path: cdktf.stringToTerraform(struct.path),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export function codebuildProjectSecondarySourceVersionToTerraform(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 {
        source_identifier: cdktf.stringToTerraform(struct.sourceIdentifier),
        source_version: cdktf.stringToTerraform(struct.sourceVersion),
    };
}
export function codebuildProjectSecondarySourcesAuthToTerraform(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 {
        resource: cdktf.stringToTerraform(struct.resource),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export class CodebuildProjectSecondarySourcesAuthOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._resource !== undefined) {
            hasAnyValues = true;
            internalValueResult.resource = this._resource;
        }
        if (this._type !== undefined) {
            hasAnyValues = true;
            internalValueResult.type = this._type;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._resource = undefined;
            this._type = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._resource = value.resource;
            this._type = value.type;
        }
    }
    // resource - computed: false, optional: true, required: false
    _resource;
    get resource() {
        return this.getStringAttribute('resource');
    }
    set resource(value) {
        this._resource = value;
    }
    resetResource() {
        this._resource = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get resourceInput() {
        return this._resource;
    }
    // type - computed: false, optional: false, required: true
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
}
export function codebuildProjectSecondarySourcesBuildStatusConfigToTerraform(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 {
        context: cdktf.stringToTerraform(struct.context),
        target_url: cdktf.stringToTerraform(struct.targetUrl),
    };
}
export class CodebuildProjectSecondarySourcesBuildStatusConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._context !== undefined) {
            hasAnyValues = true;
            internalValueResult.context = this._context;
        }
        if (this._targetUrl !== undefined) {
            hasAnyValues = true;
            internalValueResult.targetUrl = this._targetUrl;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._context = undefined;
            this._targetUrl = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._context = value.context;
            this._targetUrl = value.targetUrl;
        }
    }
    // context - computed: false, optional: true, required: false
    _context;
    get context() {
        return this.getStringAttribute('context');
    }
    set context(value) {
        this._context = value;
    }
    resetContext() {
        this._context = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get contextInput() {
        return this._context;
    }
    // target_url - computed: false, optional: true, required: false
    _targetUrl;
    get targetUrl() {
        return this.getStringAttribute('target_url');
    }
    set targetUrl(value) {
        this._targetUrl = value;
    }
    resetTargetUrl() {
        this._targetUrl = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get targetUrlInput() {
        return this._targetUrl;
    }
}
export function codebuildProjectSecondarySourcesGitSubmodulesConfigToTerraform(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 {
        fetch_submodules: cdktf.booleanToTerraform(struct.fetchSubmodules),
    };
}
export class CodebuildProjectSecondarySourcesGitSubmodulesConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._fetchSubmodules !== undefined) {
            hasAnyValues = true;
            internalValueResult.fetchSubmodules = this._fetchSubmodules;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._fetchSubmodules = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._fetchSubmodules = value.fetchSubmodules;
        }
    }
    // fetch_submodules - computed: false, optional: false, required: true
    _fetchSubmodules;
    get fetchSubmodules() {
        return this.getBooleanAttribute('fetch_submodules');
    }
    set fetchSubmodules(value) {
        this._fetchSubmodules = value;
    }
    // Temporarily expose input value. Use with caution.
    get fetchSubmodulesInput() {
        return this._fetchSubmodules;
    }
}
export function codebuildProjectSecondarySourcesToTerraform(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 {
        buildspec: cdktf.stringToTerraform(struct.buildspec),
        git_clone_depth: cdktf.numberToTerraform(struct.gitCloneDepth),
        insecure_ssl: cdktf.booleanToTerraform(struct.insecureSsl),
        location: cdktf.stringToTerraform(struct.location),
        report_build_status: cdktf.booleanToTerraform(struct.reportBuildStatus),
        source_identifier: cdktf.stringToTerraform(struct.sourceIdentifier),
        type: cdktf.stringToTerraform(struct.type),
        auth: codebuildProjectSecondarySourcesAuthToTerraform(struct.auth),
        build_status_config: codebuildProjectSecondarySourcesBuildStatusConfigToTerraform(struct.buildStatusConfig),
        git_submodules_config: codebuildProjectSecondarySourcesGitSubmodulesConfigToTerraform(struct.gitSubmodulesConfig),
    };
}
export function codebuildProjectSourceAuthToTerraform(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 {
        resource: cdktf.stringToTerraform(struct.resource),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export class CodebuildProjectSourceAuthOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._resource !== undefined) {
            hasAnyValues = true;
            internalValueResult.resource = this._resource;
        }
        if (this._type !== undefined) {
            hasAnyValues = true;
            internalValueResult.type = this._type;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._resource = undefined;
            this._type = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._resource = value.resource;
            this._type = value.type;
        }
    }
    // resource - computed: false, optional: true, required: false
    _resource;
    get resource() {
        return this.getStringAttribute('resource');
    }
    set resource(value) {
        this._resource = value;
    }
    resetResource() {
        this._resource = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get resourceInput() {
        return this._resource;
    }
    // type - computed: false, optional: false, required: true
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
}
export function codebuildProjectSourceBuildStatusConfigToTerraform(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 {
        context: cdktf.stringToTerraform(struct.context),
        target_url: cdktf.stringToTerraform(struct.targetUrl),
    };
}
export class CodebuildProjectSourceBuildStatusConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._context !== undefined) {
            hasAnyValues = true;
            internalValueResult.context = this._context;
        }
        if (this._targetUrl !== undefined) {
            hasAnyValues = true;
            internalValueResult.targetUrl = this._targetUrl;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._context = undefined;
            this._targetUrl = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._context = value.context;
            this._targetUrl = value.targetUrl;
        }
    }
    // context - computed: false, optional: true, required: false
    _context;
    get context() {
        return this.getStringAttribute('context');
    }
    set context(value) {
        this._context = value;
    }
    resetContext() {
        this._context = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get contextInput() {
        return this._context;
    }
    // target_url - computed: false, optional: true, required: false
    _targetUrl;
    get targetUrl() {
        return this.getStringAttribute('target_url');
    }
    set targetUrl(value) {
        this._targetUrl = value;
    }
    resetTargetUrl() {
        this._targetUrl = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get targetUrlInput() {
        return this._targetUrl;
    }
}
export function codebuildProjectSourceGitSubmodulesConfigToTerraform(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 {
        fetch_submodules: cdktf.booleanToTerraform(struct.fetchSubmodules),
    };
}
export class CodebuildProjectSourceGitSubmodulesConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._fetchSubmodules !== undefined) {
            hasAnyValues = true;
            internalValueResult.fetchSubmodules = this._fetchSubmodules;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._fetchSubmodules = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._fetchSubmodules = value.fetchSubmodules;
        }
    }
    // fetch_submodules - computed: false, optional: false, required: true
    _fetchSubmodules;
    get fetchSubmodules() {
        return this.getBooleanAttribute('fetch_submodules');
    }
    set fetchSubmodules(value) {
        this._fetchSubmodules = value;
    }
    // Temporarily expose input value. Use with caution.
    get fetchSubmodulesInput() {
        return this._fetchSubmodules;
    }
}
export function codebuildProjectSourceToTerraform(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 {
        buildspec: cdktf.stringToTerraform(struct.buildspec),
        git_clone_depth: cdktf.numberToTerraform(struct.gitCloneDepth),
        insecure_ssl: cdktf.booleanToTerraform(struct.insecureSsl),
        location: cdktf.stringToTerraform(struct.location),
        report_build_status: cdktf.booleanToTerraform(struct.reportBuildStatus),
        type: cdktf.stringToTerraform(struct.type),
        auth: codebuildProjectSourceAuthToTerraform(struct.auth),
        build_status_config: codebuildProjectSourceBuildStatusConfigToTerraform(struct.buildStatusConfig),
        git_submodules_config: codebuildProjectSourceGitSubmodulesConfigToTerraform(struct.gitSubmodulesConfig),
    };
}
export class CodebuildProjectSourceOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._buildspec !== undefined) {
            hasAnyValues = true;
            internalValueResult.buildspec = this._buildspec;
        }
        if (this._gitCloneDepth !== undefined) {
            hasAnyValues = true;
            internalValueResult.gitCloneDepth = this._gitCloneDepth;
        }
        if (this._insecureSsl !== undefined) {
            hasAnyValues = true;
            internalValueResult.insecureSsl = this._insecureSsl;
        }
        if (this._location !== undefined) {
            hasAnyValues = true;
            internalValueResult.location = this._location;
        }
        if (this._reportBuildStatus !== undefined) {
            hasAnyValues = true;
            internalValueResult.reportBuildStatus = this._reportBuildStatus;
        }
        if (this._type !== undefined) {
            hasAnyValues = true;
            internalValueResult.type = this._type;
        }
        if (this._auth?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.auth = this._auth?.internalValue;
        }
        if (this._buildStatusConfig?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.buildStatusConfig = this._buildStatusConfig?.internalValue;
        }
        if (this._gitSubmodulesConfig?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.gitSubmodulesConfig = this._gitSubmodulesConfig?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._buildspec = undefined;
            this._gitCloneDepth = undefined;
            this._insecureSsl = undefined;
            this._location = undefined;
            this._reportBuildStatus = undefined;
            this._type = undefined;
            this._auth.internalValue = undefined;
            this._buildStatusConfig.internalValue = undefined;
            this._gitSubmodulesConfig.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._buildspec = value.buildspec;
            this._gitCloneDepth = value.gitCloneDepth;
            this._insecureSsl = value.insecureSsl;
            this._location = value.location;
            this._reportBuildStatus = value.reportBuildStatus;
            this._type = value.type;
            this._auth.internalValue = value.auth;
            this._buildStatusConfig.internalValue = value.buildStatusConfig;
            this._gitSubmodulesConfig.internalValue = value.gitSubmodulesConfig;
        }
    }
    // buildspec - computed: false, optional: true, required: false
    _buildspec;
    get buildspec() {
        return this.getStringAttribute('buildspec');
    }
    set buildspec(value) {
        this._buildspec = value;
    }
    resetBuildspec() {
        this._buildspec = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get buildspecInput() {
        return this._buildspec;
    }
    // git_clone_depth - computed: false, optional: true, required: false
    _gitCloneDepth;
    get gitCloneDepth() {
        return this.getNumberAttribute('git_clone_depth');
    }
    set gitCloneDepth(value) {
        this._gitCloneDepth = value;
    }
    resetGitCloneDepth() {
        this._gitCloneDepth = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get gitCloneDepthInput() {
        return this._gitCloneDepth;
    }
    // insecure_ssl - computed: false, optional: true, required: false
    _insecureSsl;
    get insecureSsl() {
        return this.getBooleanAttribute('insecure_ssl');
    }
    set insecureSsl(value) {
        this._insecureSsl = value;
    }
    resetInsecureSsl() {
        this._insecureSsl = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get insecureSslInput() {
        return this._insecureSsl;
    }
    // location - computed: false, optional: true, required: false
    _location;
    get location() {
        return this.getStringAttribute('location');
    }
    set location(value) {
        this._location = value;
    }
    resetLocation() {
        this._location = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get locationInput() {
        return this._location;
    }
    // report_build_status - computed: false, optional: true, required: false
    _reportBuildStatus;
    get reportBuildStatus() {
        return this.getBooleanAttribute('report_build_status');
    }
    set reportBuildStatus(value) {
        this._reportBuildStatus = value;
    }
    resetReportBuildStatus() {
        this._reportBuildStatus = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get reportBuildStatusInput() {
        return this._reportBuildStatus;
    }
    // type - computed: false, optional: false, required: true
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
    // auth - computed: false, optional: true, required: false
    _auth = new CodebuildProjectSourceAuthOutputReference(this, "auth", true);
    get auth() {
        return this._auth;
    }
    putAuth(value) {
        this._auth.internalValue = value;
    }
    resetAuth() {
        this._auth.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get authInput() {
        return this._auth.internalValue;
    }
    // build_status_config - computed: false, optional: true, required: false
    _buildStatusConfig = new CodebuildProjectSourceBuildStatusConfigOutputReference(this, "build_status_config", true);
    get buildStatusConfig() {
        return this._buildStatusConfig;
    }
    putBuildStatusConfig(value) {
        this._buildStatusConfig.internalValue = value;
    }
    resetBuildStatusConfig() {
        this._buildStatusConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get buildStatusConfigInput() {
        return this._buildStatusConfig.internalValue;
    }
    // git_submodules_config - computed: false, optional: true, required: false
    _gitSubmodulesConfig = new CodebuildProjectSourceGitSubmodulesConfigOutputReference(this, "git_submodules_config", true);
    get gitSubmodulesConfig() {
        return this._gitSubmodulesConfig;
    }
    putGitSubmodulesConfig(value) {
        this._gitSubmodulesConfig.internalValue = value;
    }
    resetGitSubmodulesConfig() {
        this._gitSubmodulesConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get gitSubmodulesConfigInput() {
        return this._gitSubmodulesConfig.internalValue;
    }
}
export function codebuildProjectVpcConfigToTerraform(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 {
        security_group_ids: cdktf.listMapper(cdktf.stringToTerraform)(struct.securityGroupIds),
        subnets: cdktf.listMapper(cdktf.stringToTerraform)(struct.subnets),
        vpc_id: cdktf.stringToTerraform(struct.vpcId),
    };
}
export class CodebuildProjectVpcConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._securityGroupIds !== undefined) {
            hasAnyValues = true;
            internalValueResult.securityGroupIds = this._securityGroupIds;
        }
        if (this._subnets !== undefined) {
            hasAnyValues = true;
            internalValueResult.subnets = this._subnets;
        }
        if (this._vpcId !== undefined) {
            hasAnyValues = true;
            internalValueResult.vpcId = this._vpcId;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._securityGroupIds = undefined;
            this._subnets = undefined;
            this._vpcId = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._securityGroupIds = value.securityGroupIds;
            this._subnets = value.subnets;
            this._vpcId = value.vpcId;
        }
    }
    // security_group_ids - computed: false, optional: false, required: true
    _securityGroupIds;
    get securityGroupIds() {
        return cdktf.Fn.tolist(this.getListAttribute('security_group_ids'));
    }
    set securityGroupIds(value) {
        this._securityGroupIds = value;
    }
    // Temporarily expose input value. Use with caution.
    get securityGroupIdsInput() {
        return this._securityGroupIds;
    }
    // subnets - computed: false, optional: false, required: true
    _subnets;
    get subnets() {
        return cdktf.Fn.tolist(this.getListAttribute('subnets'));
    }
    set subnets(value) {
        this._subnets = value;
    }
    // Temporarily expose input value. Use with caution.
    get subnetsInput() {
        return this._subnets;
    }
    // vpc_id - computed: false, optional: false, required: true
    _vpcId;
    get vpcId() {
        return this.getStringAttribute('vpc_id');
    }
    set vpcId(value) {
        this._vpcId = value;
    }
    // Temporarily expose input value. Use with caution.
    get vpcIdInput() {
        return this._vpcId;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/codebuild_project aws_codebuild_project}
*/
export class CodebuildProject extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_codebuild_project";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/codebuild_project aws_codebuild_project} 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 CodebuildProjectConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_codebuild_project',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._badgeEnabled = config.badgeEnabled;
        this._buildTimeout = config.buildTimeout;
        this._concurrentBuildLimit = config.concurrentBuildLimit;
        this._description = config.description;
        this._encryptionKey = config.encryptionKey;
        this._name = config.name;
        this._projectVisibility = config.projectVisibility;
        this._queuedTimeout = config.queuedTimeout;
        this._resourceAccessRole = config.resourceAccessRole;
        this._serviceRole = config.serviceRole;
        this._sourceVersion = config.sourceVersion;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._artifacts.internalValue = config.artifacts;
        this._buildBatchConfig.internalValue = config.buildBatchConfig;
        this._cache.internalValue = config.cache;
        this._environment.internalValue = config.environment;
        this._fileSystemLocations = config.fileSystemLocations;
        this._logsConfig.internalValue = config.logsConfig;
        this._secondaryArtifacts = config.secondaryArtifacts;
        this._secondarySourceVersion = config.secondarySourceVersion;
        this._secondarySources = config.secondarySources;
        this._source.internalValue = config.source;
        this._vpcConfig.internalValue = config.vpcConfig;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // badge_enabled - computed: false, optional: true, required: false
    _badgeEnabled;
    get badgeEnabled() {
        return this.getBooleanAttribute('badge_enabled');
    }
    set badgeEnabled(value) {
        this._badgeEnabled = value;
    }
    resetBadgeEnabled() {
        this._badgeEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get badgeEnabledInput() {
        return this._badgeEnabled;
    }
    // badge_url - computed: true, optional: false, required: false
    get badgeUrl() {
        return this.getStringAttribute('badge_url');
    }
    // build_timeout - computed: false, optional: true, required: false
    _buildTimeout;
    get buildTimeout() {
        return this.getNumberAttribute('build_timeout');
    }
    set buildTimeout(value) {
        this._buildTimeout = value;
    }
    resetBuildTimeout() {
        this._buildTimeout = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get buildTimeoutInput() {
        return this._buildTimeout;
    }
    // concurrent_build_limit - computed: false, optional: true, required: false
    _concurrentBuildLimit;
    get concurrentBuildLimit() {
        return this.getNumberAttribute('concurrent_build_limit');
    }
    set concurrentBuildLimit(value) {
        this._concurrentBuildLimit = value;
    }
    resetConcurrentBuildLimit() {
        this._concurrentBuildLimit = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get concurrentBuildLimitInput() {
        return this._concurrentBuildLimit;
    }
    // description - computed: true, 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;
    }
    // encryption_key - computed: true, optional: true, required: false
    _encryptionKey;
    get encryptionKey() {
        return this.getStringAttribute('encryption_key');
    }
    set encryptionKey(value) {
        this._encryptionKey = value;
    }
    resetEncryptionKey() {
        this._encryptionKey = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get encryptionKeyInput() {
        return this._encryptionKey;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // name - computed: false, optional: false, required: true
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // project_visibility - computed: false, optional: true, required: false
    _projectVisibility;
    get projectVisibility() {
        return this.getStringAttribute('project_visibility');
    }
    set projectVisibility(value) {
        this._projectVisibility = value;
    }
    resetProjectVisibility() {
        this._projectVisibility = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get projectVisibilityInput() {
        return this._projectVisibility;
    }
    // public_project_alias - computed: true, optional: false, required: false
    get publicProjectAlias() {
        return this.getStringAttribute('public_project_alias');
    }
    // queued_timeout - computed: false, optional: true, required: false
    _queuedTimeout;
    get queuedTimeout() {
        return this.getNumberAttribute('queued_timeout');
    }
    set queuedTimeout(value) {
        this._queuedTimeout = value;
    }
    resetQueuedTimeout() {
        this._queuedTimeout = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get queuedTimeoutInput() {
        return this._queuedTimeout;
    }
    // resource_access_role - computed: false, optional: true, required: false
    _resourceAccessRole;
    get resourceAccessRole() {
        return this.getStringAttribute('resource_access_role');
    }
    set resourceAccessRole(value) {
        this._resourceAccessRole = value;
    }
    resetResourceAccessRole() {
        this._resourceAccessRole = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get resourceAccessRoleInput() {
        return this._resourceAccessRole;
    }
    // service_role - computed: false, optional: false, required: true
    _serviceRole;
    get serviceRole() {
        return this.getStringAttribute('service_role');
    }
    set serviceRole(value) {
        this._serviceRole = value;
    }
    // Temporarily expose input value. Use with caution.
    get serviceRoleInput() {
        return this._serviceRole;
    }
    // source_version - computed: false, optional: true, required: false
    _sourceVersion;
    get sourceVersion() {
        return this.getStringAttribute('source_version');
    }
    set sourceVersion(value) {
        this._sourceVersion = value;
    }
    resetSourceVersion() {
        this._sourceVersion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sourceVersionInput() {
        return this._sourceVersion;
    }
    // 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;
    }
    // artifacts - computed: false, optional: false, required: true
    _artifacts = new CodebuildProjectArtifactsOutputReference(this, "artifacts", true);
    get artifacts() {
        return this._artifacts;
    }
    putArtifacts(value) {
        this._artifacts.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get artifactsInput() {
        return this._artifacts.internalValue;
    }
    // build_batch_config - computed: false, optional: true, required: false
    _buildBatchConfig = new CodebuildProjectBuildBatchConfigOutputReference(this, "build_batch_config", true);
    get buildBatchConfig() {
        return this._buildBatchConfig;
    }
    putBuildBatchConfig(value) {
        this._buildBatchConfig.internalValue = value;
    }
    resetBuildBatchConfig() {
        this._buildBatchConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get buildBatchConfigInput() {
        return this._buildBatchConfig.internalValue;
    }
    // cache - computed: false, optional: true, required: false
    _cache = new CodebuildProjectCacheOutputReference(this, "cache", true);
    get cache() {
        return this._cache;
    }
    putCache(value) {
        this._cache.internalValue = value;
    }
    resetCache() {
        this._cache.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cacheInput() {
        return this._cache.internalValue;
    }
    // environment - computed: false, optional: false, required: true
    _environment = new CodebuildProjectEnvironmentOutputReference(this, "environment", true);
    get environment() {
        return this._environment;
    }
    putEnvironment(value) {
        this._environment.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get environmentInput() {
        return this._environment.internalValue;
    }
    // file_system_locations - computed: false, optional: true, required: false
    _fileSystemLocations;
    get fileSystemLocations() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('file_system_locations')));
    }
    set fileSystemLocations(value) {
        this._fileSystemLocations = value;
    }
    resetFileSystemLocations() {
        this._fileSystemLocations = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get fileSystemLocationsInput() {
        return this._fileSystemLocations;
    }
    // logs_config - computed: false, optional: true, required: false
    _logsConfig = new CodebuildProjectLogsConfigOutputReference(this, "logs_config", true);
    get logsConfig() {
        return this._logsConfig;
    }
    putLogsConfig(value) {
        this._logsConfig.internalValue = value;
    }
    resetLogsConfig() {
        this._logsConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get logsConfigInput() {
        return this._logsConfig.internalValue;
    }
    // secondary_artifacts - computed: false, optional: true, required: false
    _secondaryArtifacts;
    get secondaryArtifacts() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('secondary_artifacts')));
    }
    set secondaryArtifacts(value) {
        this._secondaryArtifacts = value;
    }
    resetSecondaryArtifacts() {
        this._secondaryArtifacts = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get secondaryArtifactsInput() {
        return this._secondaryArtifacts;
    }
    // secondary_source_version - computed: false, optional: true, required: false
    _secondarySourceVersion;
    get secondarySourceVersion() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('secondary_source_version')));
    }
    set secondarySourceVersion(value) {
        this._secondarySourceVersion = value;
    }
    resetSecondarySourceVersion() {
        this._secondarySourceVersion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get secondarySourceVersionInput() {
        return this._secondarySourceVersion;
    }
    // secondary_sources - computed: false, optional: true, required: false
    _secondarySources;
    get secondarySources() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('secondary_sources')));
    }
    set secondarySources(value) {
        this._secondarySources = value;
    }
    resetSecondarySources() {
        this._secondarySources = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get secondarySourcesInput() {
        return this._secondarySources;
    }
    // source - computed: false, optional: false, required: true
    _source = new CodebuildProjectSourceOutputReference(this, "source", true);
    get source() {
        return this._source;
    }
    putSource(value) {
        this._source.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get sourceInput() {
        return this._source.internalValue;
    }
    // vpc_config - computed: false, optional: true, required: false
    _vpcConfig = new CodebuildProjectVpcConfigOutputReference(this, "vpc_config", true);
    get vpcConfig() {
        return this._vpcConfig;
    }
    putVpcConfig(value) {
        this._vpcConfig.internalValue = value;
    }
    resetVpcConfig() {
        this._vpcConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get vpcConfigInput() {
        return this._vpcConfig.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            badge_enabled: cdktf.booleanToTerraform(this._badgeEnabled),
            build_timeout: cdktf.numberToTerraform(this._buildTimeout),
            concurrent_build_limit: cdktf.numberToTerraform(this._concurrentBuildLimit),
            description: cdktf.stringToTerraform(this._description),
            encryption_key: cdktf.stringToTerraform(this._encryptionKey),
            name: cdktf.stringToTerraform(this._name),
            project_visibility: cdktf.stringToTerraform(this._projectVisibility),
            queued_timeout: cdktf.numberToTerraform(this._queuedTimeout),
            resource_access_role: cdktf.stringToTerraform(this._resourceAccessRole),
            service_role: cdktf.stringToTerraform(this._serviceRole),
            source_version: cdktf.stringToTerraform(this._sourceVersion),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            artifacts: codebuildProjectArtifactsToTerraform(this._artifacts.internalValue),
            build_batch_config: codebuildProjectBuildBatchConfigToTerraform(this._buildBatchConfig.internalValue),
            cache: codebuildProjectCacheToTerraform(this._cache.internalValue),
            environment: codebuildProjectEnvironmentToTerraform(this._environment.internalValue),
            file_system_locations: cdktf.listMapper(codebuildProjectFileSystemLocationsToTerraform)(this._fileSystemLocations),
            logs_config: codebuildProjectLogsConfigToTerraform(this._logsConfig.internalValue),
            secondary_artifacts: cdktf.listMapper(codebuildProjectSecondaryArtifactsToTerraform)(this._secondaryArtifacts),
            secondary_source_version: cdktf.listMapper(codebuildProjectSecondarySourceVersionToTerraform)(this._secondarySourceVersion),
            secondary_sources: cdktf.listMapper(codebuildProjectSecondarySourcesToTerraform)(this._secondarySources),
            source: codebuildProjectSourceToTerraform(this._source.internalValue),
            vpc_config: codebuildProjectVpcConfigToTerraform(this._vpcConfig.internalValue),
        };
    }
}
//# sourceMappingURL=codebuild-project.js.map