// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.aws.lambda.outputs;

import com.pulumi.aws.lambda.outputs.GetFunctionDeadLetterConfig;
import com.pulumi.aws.lambda.outputs.GetFunctionEnvironment;
import com.pulumi.aws.lambda.outputs.GetFunctionEphemeralStorage;
import com.pulumi.aws.lambda.outputs.GetFunctionFileSystemConfig;
import com.pulumi.aws.lambda.outputs.GetFunctionTracingConfig;
import com.pulumi.aws.lambda.outputs.GetFunctionVpcConfig;
import com.pulumi.core.annotations.CustomType;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class GetFunctionResult {
    /**
     * @return Instruction set architecture for the Lambda function.
     * 
     */
    private List<String> architectures;
    /**
     * @return Unqualified (no `:QUALIFIER` or `:VERSION` suffix) ARN identifying your Lambda Function. See also `qualified_arn`.
     * 
     */
    private String arn;
    /**
     * @return ARN for a Code Signing Configuration.
     * 
     */
    private String codeSigningConfigArn;
    /**
     * @return Configure the function&#39;s *dead letter queue*.
     * 
     */
    private GetFunctionDeadLetterConfig deadLetterConfig;
    /**
     * @return Description of what your Lambda Function does.
     * 
     */
    private String description;
    /**
     * @return Lambda environment&#39;s configuration settings.
     * 
     */
    private GetFunctionEnvironment environment;
    /**
     * @return Amount of Ephemeral storage(`/tmp`) allocated for the Lambda Function.
     * 
     */
    private List<GetFunctionEphemeralStorage> ephemeralStorages;
    /**
     * @return Connection settings for an Amazon EFS file system.
     * 
     */
    private List<GetFunctionFileSystemConfig> fileSystemConfigs;
    private String functionName;
    /**
     * @return Function entrypoint in your code.
     * 
     */
    private String handler;
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    private String id;
    /**
     * @return URI of the container image.
     * 
     */
    private String imageUri;
    /**
     * @return ARN to be used for invoking Lambda Function from API Gateway. **NOTE:** Starting with `v4.51.0` of the provider, this will *not* include the qualifier.
     * 
     */
    private String invokeArn;
    /**
     * @return ARN for the KMS encryption key.
     * 
     */
    private String kmsKeyArn;
    /**
     * @return Date this resource was last modified.
     * 
     */
    private String lastModified;
    /**
     * @return List of Lambda Layer ARNs attached to your Lambda Function.
     * 
     */
    private List<String> layers;
    /**
     * @return Amount of memory in MB your Lambda Function can use at runtime.
     * 
     */
    private Integer memorySize;
    /**
     * @return Qualified (`:QUALIFIER` or `:VERSION` suffix) ARN identifying your Lambda Function. See also `arn`.
     * 
     */
    private String qualifiedArn;
    /**
     * @return Qualified (`:QUALIFIER` or `:VERSION` suffix) ARN to be used for invoking Lambda Function from API Gateway. See also `invoke_arn`.
     * 
     */
    private String qualifiedInvokeArn;
    private @Nullable String qualifier;
    /**
     * @return The amount of reserved concurrent executions for this lambda function or `-1` if unreserved.
     * 
     */
    private Integer reservedConcurrentExecutions;
    /**
     * @return IAM role attached to the Lambda Function.
     * 
     */
    private String role;
    /**
     * @return Runtime environment for the Lambda function.
     * 
     */
    private String runtime;
    /**
     * @return ARN of a signing job.
     * 
     */
    private String signingJobArn;
    /**
     * @return The ARN for a signing profile version.
     * 
     */
    private String signingProfileVersionArn;
    /**
     * @return Base64-encoded representation of raw SHA-256 sum of the zip file.
     * 
     */
    private String sourceCodeHash;
    /**
     * @return Size in bytes of the function .zip file.
     * 
     */
    private Integer sourceCodeSize;
    private Map<String,String> tags;
    /**
     * @return Function execution time at which Lambda should terminate the function.
     * 
     */
    private Integer timeout;
    /**
     * @return Tracing settings of the function.
     * 
     */
    private GetFunctionTracingConfig tracingConfig;
    /**
     * @return The version of the Lambda function returned. If `qualifier` is not set, this will resolve to the most recent published version. If no published version of the function exists, `version` will resolve to `$LATEST`.
     * 
     */
    private String version;
    /**
     * @return VPC configuration associated with your Lambda function.
     * 
     */
    private GetFunctionVpcConfig vpcConfig;

    private GetFunctionResult() {}
    /**
     * @return Instruction set architecture for the Lambda function.
     * 
     */
    public List<String> architectures() {
        return this.architectures;
    }
    /**
     * @return Unqualified (no `:QUALIFIER` or `:VERSION` suffix) ARN identifying your Lambda Function. See also `qualified_arn`.
     * 
     */
    public String arn() {
        return this.arn;
    }
    /**
     * @return ARN for a Code Signing Configuration.
     * 
     */
    public String codeSigningConfigArn() {
        return this.codeSigningConfigArn;
    }
    /**
     * @return Configure the function&#39;s *dead letter queue*.
     * 
     */
    public GetFunctionDeadLetterConfig deadLetterConfig() {
        return this.deadLetterConfig;
    }
    /**
     * @return Description of what your Lambda Function does.
     * 
     */
    public String description() {
        return this.description;
    }
    /**
     * @return Lambda environment&#39;s configuration settings.
     * 
     */
    public GetFunctionEnvironment environment() {
        return this.environment;
    }
    /**
     * @return Amount of Ephemeral storage(`/tmp`) allocated for the Lambda Function.
     * 
     */
    public List<GetFunctionEphemeralStorage> ephemeralStorages() {
        return this.ephemeralStorages;
    }
    /**
     * @return Connection settings for an Amazon EFS file system.
     * 
     */
    public List<GetFunctionFileSystemConfig> fileSystemConfigs() {
        return this.fileSystemConfigs;
    }
    public String functionName() {
        return this.functionName;
    }
    /**
     * @return Function entrypoint in your code.
     * 
     */
    public String handler() {
        return this.handler;
    }
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    public String id() {
        return this.id;
    }
    /**
     * @return URI of the container image.
     * 
     */
    public String imageUri() {
        return this.imageUri;
    }
    /**
     * @return ARN to be used for invoking Lambda Function from API Gateway. **NOTE:** Starting with `v4.51.0` of the provider, this will *not* include the qualifier.
     * 
     */
    public String invokeArn() {
        return this.invokeArn;
    }
    /**
     * @return ARN for the KMS encryption key.
     * 
     */
    public String kmsKeyArn() {
        return this.kmsKeyArn;
    }
    /**
     * @return Date this resource was last modified.
     * 
     */
    public String lastModified() {
        return this.lastModified;
    }
    /**
     * @return List of Lambda Layer ARNs attached to your Lambda Function.
     * 
     */
    public List<String> layers() {
        return this.layers;
    }
    /**
     * @return Amount of memory in MB your Lambda Function can use at runtime.
     * 
     */
    public Integer memorySize() {
        return this.memorySize;
    }
    /**
     * @return Qualified (`:QUALIFIER` or `:VERSION` suffix) ARN identifying your Lambda Function. See also `arn`.
     * 
     */
    public String qualifiedArn() {
        return this.qualifiedArn;
    }
    /**
     * @return Qualified (`:QUALIFIER` or `:VERSION` suffix) ARN to be used for invoking Lambda Function from API Gateway. See also `invoke_arn`.
     * 
     */
    public String qualifiedInvokeArn() {
        return this.qualifiedInvokeArn;
    }
    public Optional<String> qualifier() {
        return Optional.ofNullable(this.qualifier);
    }
    /**
     * @return The amount of reserved concurrent executions for this lambda function or `-1` if unreserved.
     * 
     */
    public Integer reservedConcurrentExecutions() {
        return this.reservedConcurrentExecutions;
    }
    /**
     * @return IAM role attached to the Lambda Function.
     * 
     */
    public String role() {
        return this.role;
    }
    /**
     * @return Runtime environment for the Lambda function.
     * 
     */
    public String runtime() {
        return this.runtime;
    }
    /**
     * @return ARN of a signing job.
     * 
     */
    public String signingJobArn() {
        return this.signingJobArn;
    }
    /**
     * @return The ARN for a signing profile version.
     * 
     */
    public String signingProfileVersionArn() {
        return this.signingProfileVersionArn;
    }
    /**
     * @return Base64-encoded representation of raw SHA-256 sum of the zip file.
     * 
     */
    public String sourceCodeHash() {
        return this.sourceCodeHash;
    }
    /**
     * @return Size in bytes of the function .zip file.
     * 
     */
    public Integer sourceCodeSize() {
        return this.sourceCodeSize;
    }
    public Map<String,String> tags() {
        return this.tags;
    }
    /**
     * @return Function execution time at which Lambda should terminate the function.
     * 
     */
    public Integer timeout() {
        return this.timeout;
    }
    /**
     * @return Tracing settings of the function.
     * 
     */
    public GetFunctionTracingConfig tracingConfig() {
        return this.tracingConfig;
    }
    /**
     * @return The version of the Lambda function returned. If `qualifier` is not set, this will resolve to the most recent published version. If no published version of the function exists, `version` will resolve to `$LATEST`.
     * 
     */
    public String version() {
        return this.version;
    }
    /**
     * @return VPC configuration associated with your Lambda function.
     * 
     */
    public GetFunctionVpcConfig vpcConfig() {
        return this.vpcConfig;
    }

    public static Builder builder() {
        return new Builder();
    }

    public static Builder builder(GetFunctionResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private List<String> architectures;
        private String arn;
        private String codeSigningConfigArn;
        private GetFunctionDeadLetterConfig deadLetterConfig;
        private String description;
        private GetFunctionEnvironment environment;
        private List<GetFunctionEphemeralStorage> ephemeralStorages;
        private List<GetFunctionFileSystemConfig> fileSystemConfigs;
        private String functionName;
        private String handler;
        private String id;
        private String imageUri;
        private String invokeArn;
        private String kmsKeyArn;
        private String lastModified;
        private List<String> layers;
        private Integer memorySize;
        private String qualifiedArn;
        private String qualifiedInvokeArn;
        private @Nullable String qualifier;
        private Integer reservedConcurrentExecutions;
        private String role;
        private String runtime;
        private String signingJobArn;
        private String signingProfileVersionArn;
        private String sourceCodeHash;
        private Integer sourceCodeSize;
        private Map<String,String> tags;
        private Integer timeout;
        private GetFunctionTracingConfig tracingConfig;
        private String version;
        private GetFunctionVpcConfig vpcConfig;
        public Builder() {}
        public Builder(GetFunctionResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.architectures = defaults.architectures;
    	      this.arn = defaults.arn;
    	      this.codeSigningConfigArn = defaults.codeSigningConfigArn;
    	      this.deadLetterConfig = defaults.deadLetterConfig;
    	      this.description = defaults.description;
    	      this.environment = defaults.environment;
    	      this.ephemeralStorages = defaults.ephemeralStorages;
    	      this.fileSystemConfigs = defaults.fileSystemConfigs;
    	      this.functionName = defaults.functionName;
    	      this.handler = defaults.handler;
    	      this.id = defaults.id;
    	      this.imageUri = defaults.imageUri;
    	      this.invokeArn = defaults.invokeArn;
    	      this.kmsKeyArn = defaults.kmsKeyArn;
    	      this.lastModified = defaults.lastModified;
    	      this.layers = defaults.layers;
    	      this.memorySize = defaults.memorySize;
    	      this.qualifiedArn = defaults.qualifiedArn;
    	      this.qualifiedInvokeArn = defaults.qualifiedInvokeArn;
    	      this.qualifier = defaults.qualifier;
    	      this.reservedConcurrentExecutions = defaults.reservedConcurrentExecutions;
    	      this.role = defaults.role;
    	      this.runtime = defaults.runtime;
    	      this.signingJobArn = defaults.signingJobArn;
    	      this.signingProfileVersionArn = defaults.signingProfileVersionArn;
    	      this.sourceCodeHash = defaults.sourceCodeHash;
    	      this.sourceCodeSize = defaults.sourceCodeSize;
    	      this.tags = defaults.tags;
    	      this.timeout = defaults.timeout;
    	      this.tracingConfig = defaults.tracingConfig;
    	      this.version = defaults.version;
    	      this.vpcConfig = defaults.vpcConfig;
        }

        @CustomType.Setter
        public Builder architectures(List<String> architectures) {
            this.architectures = Objects.requireNonNull(architectures);
            return this;
        }
        public Builder architectures(String... architectures) {
            return architectures(List.of(architectures));
        }
        @CustomType.Setter
        public Builder arn(String arn) {
            this.arn = Objects.requireNonNull(arn);
            return this;
        }
        @CustomType.Setter
        public Builder codeSigningConfigArn(String codeSigningConfigArn) {
            this.codeSigningConfigArn = Objects.requireNonNull(codeSigningConfigArn);
            return this;
        }
        @CustomType.Setter
        public Builder deadLetterConfig(GetFunctionDeadLetterConfig deadLetterConfig) {
            this.deadLetterConfig = Objects.requireNonNull(deadLetterConfig);
            return this;
        }
        @CustomType.Setter
        public Builder description(String description) {
            this.description = Objects.requireNonNull(description);
            return this;
        }
        @CustomType.Setter
        public Builder environment(GetFunctionEnvironment environment) {
            this.environment = Objects.requireNonNull(environment);
            return this;
        }
        @CustomType.Setter
        public Builder ephemeralStorages(List<GetFunctionEphemeralStorage> ephemeralStorages) {
            this.ephemeralStorages = Objects.requireNonNull(ephemeralStorages);
            return this;
        }
        public Builder ephemeralStorages(GetFunctionEphemeralStorage... ephemeralStorages) {
            return ephemeralStorages(List.of(ephemeralStorages));
        }
        @CustomType.Setter
        public Builder fileSystemConfigs(List<GetFunctionFileSystemConfig> fileSystemConfigs) {
            this.fileSystemConfigs = Objects.requireNonNull(fileSystemConfigs);
            return this;
        }
        public Builder fileSystemConfigs(GetFunctionFileSystemConfig... fileSystemConfigs) {
            return fileSystemConfigs(List.of(fileSystemConfigs));
        }
        @CustomType.Setter
        public Builder functionName(String functionName) {
            this.functionName = Objects.requireNonNull(functionName);
            return this;
        }
        @CustomType.Setter
        public Builder handler(String handler) {
            this.handler = Objects.requireNonNull(handler);
            return this;
        }
        @CustomType.Setter
        public Builder id(String id) {
            this.id = Objects.requireNonNull(id);
            return this;
        }
        @CustomType.Setter
        public Builder imageUri(String imageUri) {
            this.imageUri = Objects.requireNonNull(imageUri);
            return this;
        }
        @CustomType.Setter
        public Builder invokeArn(String invokeArn) {
            this.invokeArn = Objects.requireNonNull(invokeArn);
            return this;
        }
        @CustomType.Setter
        public Builder kmsKeyArn(String kmsKeyArn) {
            this.kmsKeyArn = Objects.requireNonNull(kmsKeyArn);
            return this;
        }
        @CustomType.Setter
        public Builder lastModified(String lastModified) {
            this.lastModified = Objects.requireNonNull(lastModified);
            return this;
        }
        @CustomType.Setter
        public Builder layers(List<String> layers) {
            this.layers = Objects.requireNonNull(layers);
            return this;
        }
        public Builder layers(String... layers) {
            return layers(List.of(layers));
        }
        @CustomType.Setter
        public Builder memorySize(Integer memorySize) {
            this.memorySize = Objects.requireNonNull(memorySize);
            return this;
        }
        @CustomType.Setter
        public Builder qualifiedArn(String qualifiedArn) {
            this.qualifiedArn = Objects.requireNonNull(qualifiedArn);
            return this;
        }
        @CustomType.Setter
        public Builder qualifiedInvokeArn(String qualifiedInvokeArn) {
            this.qualifiedInvokeArn = Objects.requireNonNull(qualifiedInvokeArn);
            return this;
        }
        @CustomType.Setter
        public Builder qualifier(@Nullable String qualifier) {
            this.qualifier = qualifier;
            return this;
        }
        @CustomType.Setter
        public Builder reservedConcurrentExecutions(Integer reservedConcurrentExecutions) {
            this.reservedConcurrentExecutions = Objects.requireNonNull(reservedConcurrentExecutions);
            return this;
        }
        @CustomType.Setter
        public Builder role(String role) {
            this.role = Objects.requireNonNull(role);
            return this;
        }
        @CustomType.Setter
        public Builder runtime(String runtime) {
            this.runtime = Objects.requireNonNull(runtime);
            return this;
        }
        @CustomType.Setter
        public Builder signingJobArn(String signingJobArn) {
            this.signingJobArn = Objects.requireNonNull(signingJobArn);
            return this;
        }
        @CustomType.Setter
        public Builder signingProfileVersionArn(String signingProfileVersionArn) {
            this.signingProfileVersionArn = Objects.requireNonNull(signingProfileVersionArn);
            return this;
        }
        @CustomType.Setter
        public Builder sourceCodeHash(String sourceCodeHash) {
            this.sourceCodeHash = Objects.requireNonNull(sourceCodeHash);
            return this;
        }
        @CustomType.Setter
        public Builder sourceCodeSize(Integer sourceCodeSize) {
            this.sourceCodeSize = Objects.requireNonNull(sourceCodeSize);
            return this;
        }
        @CustomType.Setter
        public Builder tags(Map<String,String> tags) {
            this.tags = Objects.requireNonNull(tags);
            return this;
        }
        @CustomType.Setter
        public Builder timeout(Integer timeout) {
            this.timeout = Objects.requireNonNull(timeout);
            return this;
        }
        @CustomType.Setter
        public Builder tracingConfig(GetFunctionTracingConfig tracingConfig) {
            this.tracingConfig = Objects.requireNonNull(tracingConfig);
            return this;
        }
        @CustomType.Setter
        public Builder version(String version) {
            this.version = Objects.requireNonNull(version);
            return this;
        }
        @CustomType.Setter
        public Builder vpcConfig(GetFunctionVpcConfig vpcConfig) {
            this.vpcConfig = Objects.requireNonNull(vpcConfig);
            return this;
        }
        public GetFunctionResult build() {
            final var o = new GetFunctionResult();
            o.architectures = architectures;
            o.arn = arn;
            o.codeSigningConfigArn = codeSigningConfigArn;
            o.deadLetterConfig = deadLetterConfig;
            o.description = description;
            o.environment = environment;
            o.ephemeralStorages = ephemeralStorages;
            o.fileSystemConfigs = fileSystemConfigs;
            o.functionName = functionName;
            o.handler = handler;
            o.id = id;
            o.imageUri = imageUri;
            o.invokeArn = invokeArn;
            o.kmsKeyArn = kmsKeyArn;
            o.lastModified = lastModified;
            o.layers = layers;
            o.memorySize = memorySize;
            o.qualifiedArn = qualifiedArn;
            o.qualifiedInvokeArn = qualifiedInvokeArn;
            o.qualifier = qualifier;
            o.reservedConcurrentExecutions = reservedConcurrentExecutions;
            o.role = role;
            o.runtime = runtime;
            o.signingJobArn = signingJobArn;
            o.signingProfileVersionArn = signingProfileVersionArn;
            o.sourceCodeHash = sourceCodeHash;
            o.sourceCodeSize = sourceCodeSize;
            o.tags = tags;
            o.timeout = timeout;
            o.tracingConfig = tracingConfig;
            o.version = version;
            o.vpcConfig = vpcConfig;
            return o;
        }
    }
}
