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

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


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

    public static final RuleGroupRuleGroupRulesSourceStatefulRuleRuleOptionArgs Empty = new RuleGroupRuleGroupRulesSourceStatefulRuleRuleOptionArgs();

    /**
     * Keyword defined by open source detection systems like Snort or Suricata for stateful rule inspection.
     * See [Snort General Rule Options](http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node31.html) or [Suricata Rule Options](https://suricata.readthedocs.io/en/suricata-5.0.1/rules/intro.html#rule-options) for more details.
     * 
     */
    @Import(name="keyword", required=true)
    private Output<String> keyword;

    /**
     * @return Keyword defined by open source detection systems like Snort or Suricata for stateful rule inspection.
     * See [Snort General Rule Options](http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node31.html) or [Suricata Rule Options](https://suricata.readthedocs.io/en/suricata-5.0.1/rules/intro.html#rule-options) for more details.
     * 
     */
    public Output<String> keyword() {
        return this.keyword;
    }

    /**
     * Set of strings for additional settings to use in stateful rule inspection.
     * 
     */
    @Import(name="settings")
    private @Nullable Output<List<String>> settings;

    /**
     * @return Set of strings for additional settings to use in stateful rule inspection.
     * 
     */
    public Optional<Output<List<String>>> settings() {
        return Optional.ofNullable(this.settings);
    }

    private RuleGroupRuleGroupRulesSourceStatefulRuleRuleOptionArgs() {}

    private RuleGroupRuleGroupRulesSourceStatefulRuleRuleOptionArgs(RuleGroupRuleGroupRulesSourceStatefulRuleRuleOptionArgs $) {
        this.keyword = $.keyword;
        this.settings = $.settings;
    }

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

    public static final class Builder {
        private RuleGroupRuleGroupRulesSourceStatefulRuleRuleOptionArgs $;

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

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

        /**
         * @param keyword Keyword defined by open source detection systems like Snort or Suricata for stateful rule inspection.
         * See [Snort General Rule Options](http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node31.html) or [Suricata Rule Options](https://suricata.readthedocs.io/en/suricata-5.0.1/rules/intro.html#rule-options) for more details.
         * 
         * @return builder
         * 
         */
        public Builder keyword(Output<String> keyword) {
            $.keyword = keyword;
            return this;
        }

        /**
         * @param keyword Keyword defined by open source detection systems like Snort or Suricata for stateful rule inspection.
         * See [Snort General Rule Options](http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node31.html) or [Suricata Rule Options](https://suricata.readthedocs.io/en/suricata-5.0.1/rules/intro.html#rule-options) for more details.
         * 
         * @return builder
         * 
         */
        public Builder keyword(String keyword) {
            return keyword(Output.of(keyword));
        }

        /**
         * @param settings Set of strings for additional settings to use in stateful rule inspection.
         * 
         * @return builder
         * 
         */
        public Builder settings(@Nullable Output<List<String>> settings) {
            $.settings = settings;
            return this;
        }

        /**
         * @param settings Set of strings for additional settings to use in stateful rule inspection.
         * 
         * @return builder
         * 
         */
        public Builder settings(List<String> settings) {
            return settings(Output.of(settings));
        }

        /**
         * @param settings Set of strings for additional settings to use in stateful rule inspection.
         * 
         * @return builder
         * 
         */
        public Builder settings(String... settings) {
            return settings(List.of(settings));
        }

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

}
