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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class GetTableItemArgs extends com.pulumi.resources.InvokeArgs {

    public static final GetTableItemArgs Empty = new GetTableItemArgs();

    @Import(name="expressionAttributeNames")
    private @Nullable Output<Map<String,String>> expressionAttributeNames;

    public Optional<Output<Map<String,String>>> expressionAttributeNames() {
        return Optional.ofNullable(this.expressionAttributeNames);
    }

    /**
     * A map of attribute names to AttributeValue objects, representing the primary key of the item to retrieve.
     * For the primary key, you must provide all of the attributes. For example, with a simple primary key, you only need to provide a value for the partition key. For a composite primary key, you must provide values for both the partition key and the sort key.
     * 
     * The following arguments are optional:
     * 
     */
    @Import(name="key", required=true)
    private Output<String> key;

    /**
     * @return A map of attribute names to AttributeValue objects, representing the primary key of the item to retrieve.
     * For the primary key, you must provide all of the attributes. For example, with a simple primary key, you only need to provide a value for the partition key. For a composite primary key, you must provide values for both the partition key and the sort key.
     * 
     * The following arguments are optional:
     * 
     */
    public Output<String> key() {
        return this.key;
    }

    /**
     * A string that identifies one or more attributes to retrieve from the table. These attributes can include scalars, sets, or elements of a JSON document. The attributes in the expression must be separated by commas.
     * If no attribute names are specified, then all attributes are returned. If any of the requested attributes are not found, they do not appear in the result.
     * 
     */
    @Import(name="projectionExpression")
    private @Nullable Output<String> projectionExpression;

    /**
     * @return A string that identifies one or more attributes to retrieve from the table. These attributes can include scalars, sets, or elements of a JSON document. The attributes in the expression must be separated by commas.
     * If no attribute names are specified, then all attributes are returned. If any of the requested attributes are not found, they do not appear in the result.
     * 
     */
    public Optional<Output<String>> projectionExpression() {
        return Optional.ofNullable(this.projectionExpression);
    }

    /**
     * The name of the table containing the requested item.
     * 
     */
    @Import(name="tableName", required=true)
    private Output<String> tableName;

    /**
     * @return The name of the table containing the requested item.
     * 
     */
    public Output<String> tableName() {
        return this.tableName;
    }

    private GetTableItemArgs() {}

    private GetTableItemArgs(GetTableItemArgs $) {
        this.expressionAttributeNames = $.expressionAttributeNames;
        this.key = $.key;
        this.projectionExpression = $.projectionExpression;
        this.tableName = $.tableName;
    }

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

    public static final class Builder {
        private GetTableItemArgs $;

        public Builder() {
            $ = new GetTableItemArgs();
        }

        public Builder(GetTableItemArgs defaults) {
            $ = new GetTableItemArgs(Objects.requireNonNull(defaults));
        }

        public Builder expressionAttributeNames(@Nullable Output<Map<String,String>> expressionAttributeNames) {
            $.expressionAttributeNames = expressionAttributeNames;
            return this;
        }

        public Builder expressionAttributeNames(Map<String,String> expressionAttributeNames) {
            return expressionAttributeNames(Output.of(expressionAttributeNames));
        }

        /**
         * @param key A map of attribute names to AttributeValue objects, representing the primary key of the item to retrieve.
         * For the primary key, you must provide all of the attributes. For example, with a simple primary key, you only need to provide a value for the partition key. For a composite primary key, you must provide values for both the partition key and the sort key.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder key(Output<String> key) {
            $.key = key;
            return this;
        }

        /**
         * @param key A map of attribute names to AttributeValue objects, representing the primary key of the item to retrieve.
         * For the primary key, you must provide all of the attributes. For example, with a simple primary key, you only need to provide a value for the partition key. For a composite primary key, you must provide values for both the partition key and the sort key.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder key(String key) {
            return key(Output.of(key));
        }

        /**
         * @param projectionExpression A string that identifies one or more attributes to retrieve from the table. These attributes can include scalars, sets, or elements of a JSON document. The attributes in the expression must be separated by commas.
         * If no attribute names are specified, then all attributes are returned. If any of the requested attributes are not found, they do not appear in the result.
         * 
         * @return builder
         * 
         */
        public Builder projectionExpression(@Nullable Output<String> projectionExpression) {
            $.projectionExpression = projectionExpression;
            return this;
        }

        /**
         * @param projectionExpression A string that identifies one or more attributes to retrieve from the table. These attributes can include scalars, sets, or elements of a JSON document. The attributes in the expression must be separated by commas.
         * If no attribute names are specified, then all attributes are returned. If any of the requested attributes are not found, they do not appear in the result.
         * 
         * @return builder
         * 
         */
        public Builder projectionExpression(String projectionExpression) {
            return projectionExpression(Output.of(projectionExpression));
        }

        /**
         * @param tableName The name of the table containing the requested item.
         * 
         * @return builder
         * 
         */
        public Builder tableName(Output<String> tableName) {
            $.tableName = tableName;
            return this;
        }

        /**
         * @param tableName The name of the table containing the requested item.
         * 
         * @return builder
         * 
         */
        public Builder tableName(String tableName) {
            return tableName(Output.of(tableName));
        }

        public GetTableItemArgs build() {
            $.key = Objects.requireNonNull($.key, "expected parameter 'key' to be non-null");
            $.tableName = Objects.requireNonNull($.tableName, "expected parameter 'tableName' to be non-null");
            return $;
        }
    }

}
