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

import com.pulumi.aws.ses.inputs.ReceiptRuleAddHeaderActionArgs;
import com.pulumi.aws.ses.inputs.ReceiptRuleBounceActionArgs;
import com.pulumi.aws.ses.inputs.ReceiptRuleLambdaActionArgs;
import com.pulumi.aws.ses.inputs.ReceiptRuleS3ActionArgs;
import com.pulumi.aws.ses.inputs.ReceiptRuleSnsActionArgs;
import com.pulumi.aws.ses.inputs.ReceiptRuleStopActionArgs;
import com.pulumi.aws.ses.inputs.ReceiptRuleWorkmailActionArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class ReceiptRuleState extends com.pulumi.resources.ResourceArgs {

    public static final ReceiptRuleState Empty = new ReceiptRuleState();

    /**
     * A list of Add Header Action blocks. Documented below.
     * 
     */
    @Import(name="addHeaderActions")
    private @Nullable Output<List<ReceiptRuleAddHeaderActionArgs>> addHeaderActions;

    /**
     * @return A list of Add Header Action blocks. Documented below.
     * 
     */
    public Optional<Output<List<ReceiptRuleAddHeaderActionArgs>>> addHeaderActions() {
        return Optional.ofNullable(this.addHeaderActions);
    }

    /**
     * The name of the rule to place this rule after
     * 
     */
    @Import(name="after")
    private @Nullable Output<String> after;

    /**
     * @return The name of the rule to place this rule after
     * 
     */
    public Optional<Output<String>> after() {
        return Optional.ofNullable(this.after);
    }

    /**
     * The SES receipt rule ARN.
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return The SES receipt rule ARN.
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * A list of Bounce Action blocks. Documented below.
     * 
     */
    @Import(name="bounceActions")
    private @Nullable Output<List<ReceiptRuleBounceActionArgs>> bounceActions;

    /**
     * @return A list of Bounce Action blocks. Documented below.
     * 
     */
    public Optional<Output<List<ReceiptRuleBounceActionArgs>>> bounceActions() {
        return Optional.ofNullable(this.bounceActions);
    }

    /**
     * If true, the rule will be enabled
     * 
     */
    @Import(name="enabled")
    private @Nullable Output<Boolean> enabled;

    /**
     * @return If true, the rule will be enabled
     * 
     */
    public Optional<Output<Boolean>> enabled() {
        return Optional.ofNullable(this.enabled);
    }

    /**
     * A list of Lambda Action blocks. Documented below.
     * 
     */
    @Import(name="lambdaActions")
    private @Nullable Output<List<ReceiptRuleLambdaActionArgs>> lambdaActions;

    /**
     * @return A list of Lambda Action blocks. Documented below.
     * 
     */
    public Optional<Output<List<ReceiptRuleLambdaActionArgs>>> lambdaActions() {
        return Optional.ofNullable(this.lambdaActions);
    }

    /**
     * The name of the rule
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

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

    /**
     * A list of email addresses
     * 
     */
    @Import(name="recipients")
    private @Nullable Output<List<String>> recipients;

    /**
     * @return A list of email addresses
     * 
     */
    public Optional<Output<List<String>>> recipients() {
        return Optional.ofNullable(this.recipients);
    }

    /**
     * The name of the rule set
     * 
     */
    @Import(name="ruleSetName")
    private @Nullable Output<String> ruleSetName;

    /**
     * @return The name of the rule set
     * 
     */
    public Optional<Output<String>> ruleSetName() {
        return Optional.ofNullable(this.ruleSetName);
    }

    /**
     * A list of S3 Action blocks. Documented below.
     * 
     */
    @Import(name="s3Actions")
    private @Nullable Output<List<ReceiptRuleS3ActionArgs>> s3Actions;

    /**
     * @return A list of S3 Action blocks. Documented below.
     * 
     */
    public Optional<Output<List<ReceiptRuleS3ActionArgs>>> s3Actions() {
        return Optional.ofNullable(this.s3Actions);
    }

    /**
     * If true, incoming emails will be scanned for spam and viruses
     * 
     */
    @Import(name="scanEnabled")
    private @Nullable Output<Boolean> scanEnabled;

    /**
     * @return If true, incoming emails will be scanned for spam and viruses
     * 
     */
    public Optional<Output<Boolean>> scanEnabled() {
        return Optional.ofNullable(this.scanEnabled);
    }

    /**
     * A list of SNS Action blocks. Documented below.
     * 
     */
    @Import(name="snsActions")
    private @Nullable Output<List<ReceiptRuleSnsActionArgs>> snsActions;

    /**
     * @return A list of SNS Action blocks. Documented below.
     * 
     */
    public Optional<Output<List<ReceiptRuleSnsActionArgs>>> snsActions() {
        return Optional.ofNullable(this.snsActions);
    }

    /**
     * A list of Stop Action blocks. Documented below.
     * 
     */
    @Import(name="stopActions")
    private @Nullable Output<List<ReceiptRuleStopActionArgs>> stopActions;

    /**
     * @return A list of Stop Action blocks. Documented below.
     * 
     */
    public Optional<Output<List<ReceiptRuleStopActionArgs>>> stopActions() {
        return Optional.ofNullable(this.stopActions);
    }

    /**
     * `Require` or `Optional`
     * 
     */
    @Import(name="tlsPolicy")
    private @Nullable Output<String> tlsPolicy;

    /**
     * @return `Require` or `Optional`
     * 
     */
    public Optional<Output<String>> tlsPolicy() {
        return Optional.ofNullable(this.tlsPolicy);
    }

    /**
     * A list of WorkMail Action blocks. Documented below.
     * 
     */
    @Import(name="workmailActions")
    private @Nullable Output<List<ReceiptRuleWorkmailActionArgs>> workmailActions;

    /**
     * @return A list of WorkMail Action blocks. Documented below.
     * 
     */
    public Optional<Output<List<ReceiptRuleWorkmailActionArgs>>> workmailActions() {
        return Optional.ofNullable(this.workmailActions);
    }

    private ReceiptRuleState() {}

    private ReceiptRuleState(ReceiptRuleState $) {
        this.addHeaderActions = $.addHeaderActions;
        this.after = $.after;
        this.arn = $.arn;
        this.bounceActions = $.bounceActions;
        this.enabled = $.enabled;
        this.lambdaActions = $.lambdaActions;
        this.name = $.name;
        this.recipients = $.recipients;
        this.ruleSetName = $.ruleSetName;
        this.s3Actions = $.s3Actions;
        this.scanEnabled = $.scanEnabled;
        this.snsActions = $.snsActions;
        this.stopActions = $.stopActions;
        this.tlsPolicy = $.tlsPolicy;
        this.workmailActions = $.workmailActions;
    }

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

    public static final class Builder {
        private ReceiptRuleState $;

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

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

        /**
         * @param addHeaderActions A list of Add Header Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder addHeaderActions(@Nullable Output<List<ReceiptRuleAddHeaderActionArgs>> addHeaderActions) {
            $.addHeaderActions = addHeaderActions;
            return this;
        }

        /**
         * @param addHeaderActions A list of Add Header Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder addHeaderActions(List<ReceiptRuleAddHeaderActionArgs> addHeaderActions) {
            return addHeaderActions(Output.of(addHeaderActions));
        }

        /**
         * @param addHeaderActions A list of Add Header Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder addHeaderActions(ReceiptRuleAddHeaderActionArgs... addHeaderActions) {
            return addHeaderActions(List.of(addHeaderActions));
        }

        /**
         * @param after The name of the rule to place this rule after
         * 
         * @return builder
         * 
         */
        public Builder after(@Nullable Output<String> after) {
            $.after = after;
            return this;
        }

        /**
         * @param after The name of the rule to place this rule after
         * 
         * @return builder
         * 
         */
        public Builder after(String after) {
            return after(Output.of(after));
        }

        /**
         * @param arn The SES receipt rule ARN.
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn The SES receipt rule ARN.
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param bounceActions A list of Bounce Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder bounceActions(@Nullable Output<List<ReceiptRuleBounceActionArgs>> bounceActions) {
            $.bounceActions = bounceActions;
            return this;
        }

        /**
         * @param bounceActions A list of Bounce Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder bounceActions(List<ReceiptRuleBounceActionArgs> bounceActions) {
            return bounceActions(Output.of(bounceActions));
        }

        /**
         * @param bounceActions A list of Bounce Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder bounceActions(ReceiptRuleBounceActionArgs... bounceActions) {
            return bounceActions(List.of(bounceActions));
        }

        /**
         * @param enabled If true, the rule will be enabled
         * 
         * @return builder
         * 
         */
        public Builder enabled(@Nullable Output<Boolean> enabled) {
            $.enabled = enabled;
            return this;
        }

        /**
         * @param enabled If true, the rule will be enabled
         * 
         * @return builder
         * 
         */
        public Builder enabled(Boolean enabled) {
            return enabled(Output.of(enabled));
        }

        /**
         * @param lambdaActions A list of Lambda Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder lambdaActions(@Nullable Output<List<ReceiptRuleLambdaActionArgs>> lambdaActions) {
            $.lambdaActions = lambdaActions;
            return this;
        }

        /**
         * @param lambdaActions A list of Lambda Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder lambdaActions(List<ReceiptRuleLambdaActionArgs> lambdaActions) {
            return lambdaActions(Output.of(lambdaActions));
        }

        /**
         * @param lambdaActions A list of Lambda Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder lambdaActions(ReceiptRuleLambdaActionArgs... lambdaActions) {
            return lambdaActions(List.of(lambdaActions));
        }

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

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

        /**
         * @param recipients A list of email addresses
         * 
         * @return builder
         * 
         */
        public Builder recipients(@Nullable Output<List<String>> recipients) {
            $.recipients = recipients;
            return this;
        }

        /**
         * @param recipients A list of email addresses
         * 
         * @return builder
         * 
         */
        public Builder recipients(List<String> recipients) {
            return recipients(Output.of(recipients));
        }

        /**
         * @param recipients A list of email addresses
         * 
         * @return builder
         * 
         */
        public Builder recipients(String... recipients) {
            return recipients(List.of(recipients));
        }

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

        /**
         * @param ruleSetName The name of the rule set
         * 
         * @return builder
         * 
         */
        public Builder ruleSetName(String ruleSetName) {
            return ruleSetName(Output.of(ruleSetName));
        }

        /**
         * @param s3Actions A list of S3 Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder s3Actions(@Nullable Output<List<ReceiptRuleS3ActionArgs>> s3Actions) {
            $.s3Actions = s3Actions;
            return this;
        }

        /**
         * @param s3Actions A list of S3 Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder s3Actions(List<ReceiptRuleS3ActionArgs> s3Actions) {
            return s3Actions(Output.of(s3Actions));
        }

        /**
         * @param s3Actions A list of S3 Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder s3Actions(ReceiptRuleS3ActionArgs... s3Actions) {
            return s3Actions(List.of(s3Actions));
        }

        /**
         * @param scanEnabled If true, incoming emails will be scanned for spam and viruses
         * 
         * @return builder
         * 
         */
        public Builder scanEnabled(@Nullable Output<Boolean> scanEnabled) {
            $.scanEnabled = scanEnabled;
            return this;
        }

        /**
         * @param scanEnabled If true, incoming emails will be scanned for spam and viruses
         * 
         * @return builder
         * 
         */
        public Builder scanEnabled(Boolean scanEnabled) {
            return scanEnabled(Output.of(scanEnabled));
        }

        /**
         * @param snsActions A list of SNS Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder snsActions(@Nullable Output<List<ReceiptRuleSnsActionArgs>> snsActions) {
            $.snsActions = snsActions;
            return this;
        }

        /**
         * @param snsActions A list of SNS Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder snsActions(List<ReceiptRuleSnsActionArgs> snsActions) {
            return snsActions(Output.of(snsActions));
        }

        /**
         * @param snsActions A list of SNS Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder snsActions(ReceiptRuleSnsActionArgs... snsActions) {
            return snsActions(List.of(snsActions));
        }

        /**
         * @param stopActions A list of Stop Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder stopActions(@Nullable Output<List<ReceiptRuleStopActionArgs>> stopActions) {
            $.stopActions = stopActions;
            return this;
        }

        /**
         * @param stopActions A list of Stop Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder stopActions(List<ReceiptRuleStopActionArgs> stopActions) {
            return stopActions(Output.of(stopActions));
        }

        /**
         * @param stopActions A list of Stop Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder stopActions(ReceiptRuleStopActionArgs... stopActions) {
            return stopActions(List.of(stopActions));
        }

        /**
         * @param tlsPolicy `Require` or `Optional`
         * 
         * @return builder
         * 
         */
        public Builder tlsPolicy(@Nullable Output<String> tlsPolicy) {
            $.tlsPolicy = tlsPolicy;
            return this;
        }

        /**
         * @param tlsPolicy `Require` or `Optional`
         * 
         * @return builder
         * 
         */
        public Builder tlsPolicy(String tlsPolicy) {
            return tlsPolicy(Output.of(tlsPolicy));
        }

        /**
         * @param workmailActions A list of WorkMail Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder workmailActions(@Nullable Output<List<ReceiptRuleWorkmailActionArgs>> workmailActions) {
            $.workmailActions = workmailActions;
            return this;
        }

        /**
         * @param workmailActions A list of WorkMail Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder workmailActions(List<ReceiptRuleWorkmailActionArgs> workmailActions) {
            return workmailActions(Output.of(workmailActions));
        }

        /**
         * @param workmailActions A list of WorkMail Action blocks. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder workmailActions(ReceiptRuleWorkmailActionArgs... workmailActions) {
            return workmailActions(List.of(workmailActions));
        }

        public ReceiptRuleState build() {
            return $;
        }
    }

}
