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

import com.pulumi.aws.qldb.inputs.StreamKinesisConfigurationArgs;
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 StreamState extends com.pulumi.resources.ResourceArgs {

    public static final StreamState Empty = new StreamState();

    /**
     * The ARN of the QLDB Stream.
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return The ARN of the QLDB Stream.
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * The exclusive date and time that specifies when the stream ends. If you don&#39;t define this parameter, the stream runs indefinitely until you cancel it. It must be in ISO 8601 date and time format and in Universal Coordinated Time (UTC). For example: `&#34;2019-06-13T21:36:34Z&#34;`.
     * 
     */
    @Import(name="exclusiveEndTime")
    private @Nullable Output<String> exclusiveEndTime;

    /**
     * @return The exclusive date and time that specifies when the stream ends. If you don&#39;t define this parameter, the stream runs indefinitely until you cancel it. It must be in ISO 8601 date and time format and in Universal Coordinated Time (UTC). For example: `&#34;2019-06-13T21:36:34Z&#34;`.
     * 
     */
    public Optional<Output<String>> exclusiveEndTime() {
        return Optional.ofNullable(this.exclusiveEndTime);
    }

    /**
     * The inclusive start date and time from which to start streaming journal data. This parameter must be in ISO 8601 date and time format and in Universal Coordinated Time (UTC). For example: `&#34;2019-06-13T21:36:34Z&#34;`.  This cannot be in the future and must be before `exclusive_end_time`.  If you provide a value that is before the ledger&#39;s `CreationDateTime`, QLDB effectively defaults it to the ledger&#39;s `CreationDateTime`.
     * 
     */
    @Import(name="inclusiveStartTime")
    private @Nullable Output<String> inclusiveStartTime;

    /**
     * @return The inclusive start date and time from which to start streaming journal data. This parameter must be in ISO 8601 date and time format and in Universal Coordinated Time (UTC). For example: `&#34;2019-06-13T21:36:34Z&#34;`.  This cannot be in the future and must be before `exclusive_end_time`.  If you provide a value that is before the ledger&#39;s `CreationDateTime`, QLDB effectively defaults it to the ledger&#39;s `CreationDateTime`.
     * 
     */
    public Optional<Output<String>> inclusiveStartTime() {
        return Optional.ofNullable(this.inclusiveStartTime);
    }

    /**
     * The configuration settings of the Kinesis Data Streams destination for your stream request. Documented below.
     * 
     */
    @Import(name="kinesisConfiguration")
    private @Nullable Output<StreamKinesisConfigurationArgs> kinesisConfiguration;

    /**
     * @return The configuration settings of the Kinesis Data Streams destination for your stream request. Documented below.
     * 
     */
    public Optional<Output<StreamKinesisConfigurationArgs>> kinesisConfiguration() {
        return Optional.ofNullable(this.kinesisConfiguration);
    }

    /**
     * The name of the QLDB ledger.
     * 
     */
    @Import(name="ledgerName")
    private @Nullable Output<String> ledgerName;

    /**
     * @return The name of the QLDB ledger.
     * 
     */
    public Optional<Output<String>> ledgerName() {
        return Optional.ofNullable(this.ledgerName);
    }

    /**
     * The Amazon Resource Name (ARN) of the IAM role that grants QLDB permissions for a journal stream to write data records to a Kinesis Data Streams resource.
     * 
     */
    @Import(name="roleArn")
    private @Nullable Output<String> roleArn;

    /**
     * @return The Amazon Resource Name (ARN) of the IAM role that grants QLDB permissions for a journal stream to write data records to a Kinesis Data Streams resource.
     * 
     */
    public Optional<Output<String>> roleArn() {
        return Optional.ofNullable(this.roleArn);
    }

    /**
     * The name that you want to assign to the QLDB journal stream. User-defined names can help identify and indicate the purpose of a stream.  Your stream name must be unique among other active streams for a given ledger. Stream names have the same naming constraints as ledger names, as defined in the [Amazon QLDB Developer Guide](https://docs.aws.amazon.com/qldb/latest/developerguide/limits.html#limits.naming).
     * 
     */
    @Import(name="streamName")
    private @Nullable Output<String> streamName;

    /**
     * @return The name that you want to assign to the QLDB journal stream. User-defined names can help identify and indicate the purpose of a stream.  Your stream name must be unique among other active streams for a given ledger. Stream names have the same naming constraints as ledger names, as defined in the [Amazon QLDB Developer Guide](https://docs.aws.amazon.com/qldb/latest/developerguide/limits.html#limits.naming).
     * 
     */
    public Optional<Output<String>> streamName() {
        return Optional.ofNullable(this.streamName);
    }

    /**
     * Key-value map of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return Key-value map of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * A map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    @Import(name="tagsAll")
    private @Nullable Output<Map<String,String>> tagsAll;

    /**
     * @return A map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    public Optional<Output<Map<String,String>>> tagsAll() {
        return Optional.ofNullable(this.tagsAll);
    }

    private StreamState() {}

    private StreamState(StreamState $) {
        this.arn = $.arn;
        this.exclusiveEndTime = $.exclusiveEndTime;
        this.inclusiveStartTime = $.inclusiveStartTime;
        this.kinesisConfiguration = $.kinesisConfiguration;
        this.ledgerName = $.ledgerName;
        this.roleArn = $.roleArn;
        this.streamName = $.streamName;
        this.tags = $.tags;
        this.tagsAll = $.tagsAll;
    }

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

    public static final class Builder {
        private StreamState $;

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

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

        /**
         * @param arn The ARN of the QLDB Stream.
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn The ARN of the QLDB Stream.
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param exclusiveEndTime The exclusive date and time that specifies when the stream ends. If you don&#39;t define this parameter, the stream runs indefinitely until you cancel it. It must be in ISO 8601 date and time format and in Universal Coordinated Time (UTC). For example: `&#34;2019-06-13T21:36:34Z&#34;`.
         * 
         * @return builder
         * 
         */
        public Builder exclusiveEndTime(@Nullable Output<String> exclusiveEndTime) {
            $.exclusiveEndTime = exclusiveEndTime;
            return this;
        }

        /**
         * @param exclusiveEndTime The exclusive date and time that specifies when the stream ends. If you don&#39;t define this parameter, the stream runs indefinitely until you cancel it. It must be in ISO 8601 date and time format and in Universal Coordinated Time (UTC). For example: `&#34;2019-06-13T21:36:34Z&#34;`.
         * 
         * @return builder
         * 
         */
        public Builder exclusiveEndTime(String exclusiveEndTime) {
            return exclusiveEndTime(Output.of(exclusiveEndTime));
        }

        /**
         * @param inclusiveStartTime The inclusive start date and time from which to start streaming journal data. This parameter must be in ISO 8601 date and time format and in Universal Coordinated Time (UTC). For example: `&#34;2019-06-13T21:36:34Z&#34;`.  This cannot be in the future and must be before `exclusive_end_time`.  If you provide a value that is before the ledger&#39;s `CreationDateTime`, QLDB effectively defaults it to the ledger&#39;s `CreationDateTime`.
         * 
         * @return builder
         * 
         */
        public Builder inclusiveStartTime(@Nullable Output<String> inclusiveStartTime) {
            $.inclusiveStartTime = inclusiveStartTime;
            return this;
        }

        /**
         * @param inclusiveStartTime The inclusive start date and time from which to start streaming journal data. This parameter must be in ISO 8601 date and time format and in Universal Coordinated Time (UTC). For example: `&#34;2019-06-13T21:36:34Z&#34;`.  This cannot be in the future and must be before `exclusive_end_time`.  If you provide a value that is before the ledger&#39;s `CreationDateTime`, QLDB effectively defaults it to the ledger&#39;s `CreationDateTime`.
         * 
         * @return builder
         * 
         */
        public Builder inclusiveStartTime(String inclusiveStartTime) {
            return inclusiveStartTime(Output.of(inclusiveStartTime));
        }

        /**
         * @param kinesisConfiguration The configuration settings of the Kinesis Data Streams destination for your stream request. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder kinesisConfiguration(@Nullable Output<StreamKinesisConfigurationArgs> kinesisConfiguration) {
            $.kinesisConfiguration = kinesisConfiguration;
            return this;
        }

        /**
         * @param kinesisConfiguration The configuration settings of the Kinesis Data Streams destination for your stream request. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder kinesisConfiguration(StreamKinesisConfigurationArgs kinesisConfiguration) {
            return kinesisConfiguration(Output.of(kinesisConfiguration));
        }

        /**
         * @param ledgerName The name of the QLDB ledger.
         * 
         * @return builder
         * 
         */
        public Builder ledgerName(@Nullable Output<String> ledgerName) {
            $.ledgerName = ledgerName;
            return this;
        }

        /**
         * @param ledgerName The name of the QLDB ledger.
         * 
         * @return builder
         * 
         */
        public Builder ledgerName(String ledgerName) {
            return ledgerName(Output.of(ledgerName));
        }

        /**
         * @param roleArn The Amazon Resource Name (ARN) of the IAM role that grants QLDB permissions for a journal stream to write data records to a Kinesis Data Streams resource.
         * 
         * @return builder
         * 
         */
        public Builder roleArn(@Nullable Output<String> roleArn) {
            $.roleArn = roleArn;
            return this;
        }

        /**
         * @param roleArn The Amazon Resource Name (ARN) of the IAM role that grants QLDB permissions for a journal stream to write data records to a Kinesis Data Streams resource.
         * 
         * @return builder
         * 
         */
        public Builder roleArn(String roleArn) {
            return roleArn(Output.of(roleArn));
        }

        /**
         * @param streamName The name that you want to assign to the QLDB journal stream. User-defined names can help identify and indicate the purpose of a stream.  Your stream name must be unique among other active streams for a given ledger. Stream names have the same naming constraints as ledger names, as defined in the [Amazon QLDB Developer Guide](https://docs.aws.amazon.com/qldb/latest/developerguide/limits.html#limits.naming).
         * 
         * @return builder
         * 
         */
        public Builder streamName(@Nullable Output<String> streamName) {
            $.streamName = streamName;
            return this;
        }

        /**
         * @param streamName The name that you want to assign to the QLDB journal stream. User-defined names can help identify and indicate the purpose of a stream.  Your stream name must be unique among other active streams for a given ledger. Stream names have the same naming constraints as ledger names, as defined in the [Amazon QLDB Developer Guide](https://docs.aws.amazon.com/qldb/latest/developerguide/limits.html#limits.naming).
         * 
         * @return builder
         * 
         */
        public Builder streamName(String streamName) {
            return streamName(Output.of(streamName));
        }

        /**
         * @param tags Key-value map of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags Key-value map of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param tagsAll A map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(@Nullable Output<Map<String,String>> tagsAll) {
            $.tagsAll = tagsAll;
            return this;
        }

        /**
         * @param tagsAll A map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(Map<String,String> tagsAll) {
            return tagsAll(Output.of(tagsAll));
        }

        public StreamState build() {
            return $;
        }
    }

}
