// *** 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.dynamodb.outputs;

import com.pulumi.aws.dynamodb.outputs.GetTableAttribute;
import com.pulumi.aws.dynamodb.outputs.GetTableGlobalSecondaryIndex;
import com.pulumi.aws.dynamodb.outputs.GetTableLocalSecondaryIndex;
import com.pulumi.aws.dynamodb.outputs.GetTablePointInTimeRecovery;
import com.pulumi.aws.dynamodb.outputs.GetTableReplica;
import com.pulumi.aws.dynamodb.outputs.GetTableServerSideEncryption;
import com.pulumi.aws.dynamodb.outputs.GetTableTtl;
import com.pulumi.core.annotations.CustomType;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@CustomType
public final class GetTableResult {
    private String arn;
    private List<GetTableAttribute> attributes;
    private String billingMode;
    private Boolean deletionProtectionEnabled;
    private List<GetTableGlobalSecondaryIndex> globalSecondaryIndexes;
    private String hashKey;
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    private String id;
    private List<GetTableLocalSecondaryIndex> localSecondaryIndexes;
    private String name;
    private GetTablePointInTimeRecovery pointInTimeRecovery;
    private String rangeKey;
    private Integer readCapacity;
    private List<GetTableReplica> replicas;
    private GetTableServerSideEncryption serverSideEncryption;
    private String streamArn;
    private Boolean streamEnabled;
    private String streamLabel;
    private String streamViewType;
    private String tableClass;
    private Map<String,String> tags;
    private GetTableTtl ttl;
    private Integer writeCapacity;

    private GetTableResult() {}
    public String arn() {
        return this.arn;
    }
    public List<GetTableAttribute> attributes() {
        return this.attributes;
    }
    public String billingMode() {
        return this.billingMode;
    }
    public Boolean deletionProtectionEnabled() {
        return this.deletionProtectionEnabled;
    }
    public List<GetTableGlobalSecondaryIndex> globalSecondaryIndexes() {
        return this.globalSecondaryIndexes;
    }
    public String hashKey() {
        return this.hashKey;
    }
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    public String id() {
        return this.id;
    }
    public List<GetTableLocalSecondaryIndex> localSecondaryIndexes() {
        return this.localSecondaryIndexes;
    }
    public String name() {
        return this.name;
    }
    public GetTablePointInTimeRecovery pointInTimeRecovery() {
        return this.pointInTimeRecovery;
    }
    public String rangeKey() {
        return this.rangeKey;
    }
    public Integer readCapacity() {
        return this.readCapacity;
    }
    public List<GetTableReplica> replicas() {
        return this.replicas;
    }
    public GetTableServerSideEncryption serverSideEncryption() {
        return this.serverSideEncryption;
    }
    public String streamArn() {
        return this.streamArn;
    }
    public Boolean streamEnabled() {
        return this.streamEnabled;
    }
    public String streamLabel() {
        return this.streamLabel;
    }
    public String streamViewType() {
        return this.streamViewType;
    }
    public String tableClass() {
        return this.tableClass;
    }
    public Map<String,String> tags() {
        return this.tags;
    }
    public GetTableTtl ttl() {
        return this.ttl;
    }
    public Integer writeCapacity() {
        return this.writeCapacity;
    }

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

    public static Builder builder(GetTableResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private String arn;
        private List<GetTableAttribute> attributes;
        private String billingMode;
        private Boolean deletionProtectionEnabled;
        private List<GetTableGlobalSecondaryIndex> globalSecondaryIndexes;
        private String hashKey;
        private String id;
        private List<GetTableLocalSecondaryIndex> localSecondaryIndexes;
        private String name;
        private GetTablePointInTimeRecovery pointInTimeRecovery;
        private String rangeKey;
        private Integer readCapacity;
        private List<GetTableReplica> replicas;
        private GetTableServerSideEncryption serverSideEncryption;
        private String streamArn;
        private Boolean streamEnabled;
        private String streamLabel;
        private String streamViewType;
        private String tableClass;
        private Map<String,String> tags;
        private GetTableTtl ttl;
        private Integer writeCapacity;
        public Builder() {}
        public Builder(GetTableResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.arn = defaults.arn;
    	      this.attributes = defaults.attributes;
    	      this.billingMode = defaults.billingMode;
    	      this.deletionProtectionEnabled = defaults.deletionProtectionEnabled;
    	      this.globalSecondaryIndexes = defaults.globalSecondaryIndexes;
    	      this.hashKey = defaults.hashKey;
    	      this.id = defaults.id;
    	      this.localSecondaryIndexes = defaults.localSecondaryIndexes;
    	      this.name = defaults.name;
    	      this.pointInTimeRecovery = defaults.pointInTimeRecovery;
    	      this.rangeKey = defaults.rangeKey;
    	      this.readCapacity = defaults.readCapacity;
    	      this.replicas = defaults.replicas;
    	      this.serverSideEncryption = defaults.serverSideEncryption;
    	      this.streamArn = defaults.streamArn;
    	      this.streamEnabled = defaults.streamEnabled;
    	      this.streamLabel = defaults.streamLabel;
    	      this.streamViewType = defaults.streamViewType;
    	      this.tableClass = defaults.tableClass;
    	      this.tags = defaults.tags;
    	      this.ttl = defaults.ttl;
    	      this.writeCapacity = defaults.writeCapacity;
        }

        @CustomType.Setter
        public Builder arn(String arn) {
            this.arn = Objects.requireNonNull(arn);
            return this;
        }
        @CustomType.Setter
        public Builder attributes(List<GetTableAttribute> attributes) {
            this.attributes = Objects.requireNonNull(attributes);
            return this;
        }
        public Builder attributes(GetTableAttribute... attributes) {
            return attributes(List.of(attributes));
        }
        @CustomType.Setter
        public Builder billingMode(String billingMode) {
            this.billingMode = Objects.requireNonNull(billingMode);
            return this;
        }
        @CustomType.Setter
        public Builder deletionProtectionEnabled(Boolean deletionProtectionEnabled) {
            this.deletionProtectionEnabled = Objects.requireNonNull(deletionProtectionEnabled);
            return this;
        }
        @CustomType.Setter
        public Builder globalSecondaryIndexes(List<GetTableGlobalSecondaryIndex> globalSecondaryIndexes) {
            this.globalSecondaryIndexes = Objects.requireNonNull(globalSecondaryIndexes);
            return this;
        }
        public Builder globalSecondaryIndexes(GetTableGlobalSecondaryIndex... globalSecondaryIndexes) {
            return globalSecondaryIndexes(List.of(globalSecondaryIndexes));
        }
        @CustomType.Setter
        public Builder hashKey(String hashKey) {
            this.hashKey = Objects.requireNonNull(hashKey);
            return this;
        }
        @CustomType.Setter
        public Builder id(String id) {
            this.id = Objects.requireNonNull(id);
            return this;
        }
        @CustomType.Setter
        public Builder localSecondaryIndexes(List<GetTableLocalSecondaryIndex> localSecondaryIndexes) {
            this.localSecondaryIndexes = Objects.requireNonNull(localSecondaryIndexes);
            return this;
        }
        public Builder localSecondaryIndexes(GetTableLocalSecondaryIndex... localSecondaryIndexes) {
            return localSecondaryIndexes(List.of(localSecondaryIndexes));
        }
        @CustomType.Setter
        public Builder name(String name) {
            this.name = Objects.requireNonNull(name);
            return this;
        }
        @CustomType.Setter
        public Builder pointInTimeRecovery(GetTablePointInTimeRecovery pointInTimeRecovery) {
            this.pointInTimeRecovery = Objects.requireNonNull(pointInTimeRecovery);
            return this;
        }
        @CustomType.Setter
        public Builder rangeKey(String rangeKey) {
            this.rangeKey = Objects.requireNonNull(rangeKey);
            return this;
        }
        @CustomType.Setter
        public Builder readCapacity(Integer readCapacity) {
            this.readCapacity = Objects.requireNonNull(readCapacity);
            return this;
        }
        @CustomType.Setter
        public Builder replicas(List<GetTableReplica> replicas) {
            this.replicas = Objects.requireNonNull(replicas);
            return this;
        }
        public Builder replicas(GetTableReplica... replicas) {
            return replicas(List.of(replicas));
        }
        @CustomType.Setter
        public Builder serverSideEncryption(GetTableServerSideEncryption serverSideEncryption) {
            this.serverSideEncryption = Objects.requireNonNull(serverSideEncryption);
            return this;
        }
        @CustomType.Setter
        public Builder streamArn(String streamArn) {
            this.streamArn = Objects.requireNonNull(streamArn);
            return this;
        }
        @CustomType.Setter
        public Builder streamEnabled(Boolean streamEnabled) {
            this.streamEnabled = Objects.requireNonNull(streamEnabled);
            return this;
        }
        @CustomType.Setter
        public Builder streamLabel(String streamLabel) {
            this.streamLabel = Objects.requireNonNull(streamLabel);
            return this;
        }
        @CustomType.Setter
        public Builder streamViewType(String streamViewType) {
            this.streamViewType = Objects.requireNonNull(streamViewType);
            return this;
        }
        @CustomType.Setter
        public Builder tableClass(String tableClass) {
            this.tableClass = Objects.requireNonNull(tableClass);
            return this;
        }
        @CustomType.Setter
        public Builder tags(Map<String,String> tags) {
            this.tags = Objects.requireNonNull(tags);
            return this;
        }
        @CustomType.Setter
        public Builder ttl(GetTableTtl ttl) {
            this.ttl = Objects.requireNonNull(ttl);
            return this;
        }
        @CustomType.Setter
        public Builder writeCapacity(Integer writeCapacity) {
            this.writeCapacity = Objects.requireNonNull(writeCapacity);
            return this;
        }
        public GetTableResult build() {
            final var o = new GetTableResult();
            o.arn = arn;
            o.attributes = attributes;
            o.billingMode = billingMode;
            o.deletionProtectionEnabled = deletionProtectionEnabled;
            o.globalSecondaryIndexes = globalSecondaryIndexes;
            o.hashKey = hashKey;
            o.id = id;
            o.localSecondaryIndexes = localSecondaryIndexes;
            o.name = name;
            o.pointInTimeRecovery = pointInTimeRecovery;
            o.rangeKey = rangeKey;
            o.readCapacity = readCapacity;
            o.replicas = replicas;
            o.serverSideEncryption = serverSideEncryption;
            o.streamArn = streamArn;
            o.streamEnabled = streamEnabled;
            o.streamLabel = streamLabel;
            o.streamViewType = streamViewType;
            o.tableClass = tableClass;
            o.tags = tags;
            o.ttl = ttl;
            o.writeCapacity = writeCapacity;
            return o;
        }
    }
}
