// *** 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.azure.network.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 FirewallPolicyIntrusionDetectionTrafficBypassArgs extends com.pulumi.resources.ResourceArgs {

    public static final FirewallPolicyIntrusionDetectionTrafficBypassArgs Empty = new FirewallPolicyIntrusionDetectionTrafficBypassArgs();

    /**
     * The description for this bypass traffic setting.
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return The description for this bypass traffic setting.
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * Specifies a list of destination IP addresses that shall be bypassed by intrusion detection.
     * 
     */
    @Import(name="destinationAddresses")
    private @Nullable Output<List<String>> destinationAddresses;

    /**
     * @return Specifies a list of destination IP addresses that shall be bypassed by intrusion detection.
     * 
     */
    public Optional<Output<List<String>>> destinationAddresses() {
        return Optional.ofNullable(this.destinationAddresses);
    }

    /**
     * Specifies a list of destination IP groups that shall be bypassed by intrusion detection.
     * 
     */
    @Import(name="destinationIpGroups")
    private @Nullable Output<List<String>> destinationIpGroups;

    /**
     * @return Specifies a list of destination IP groups that shall be bypassed by intrusion detection.
     * 
     */
    public Optional<Output<List<String>>> destinationIpGroups() {
        return Optional.ofNullable(this.destinationIpGroups);
    }

    /**
     * Specifies a list of destination IP ports that shall be bypassed by intrusion detection.
     * 
     */
    @Import(name="destinationPorts")
    private @Nullable Output<List<String>> destinationPorts;

    /**
     * @return Specifies a list of destination IP ports that shall be bypassed by intrusion detection.
     * 
     */
    public Optional<Output<List<String>>> destinationPorts() {
        return Optional.ofNullable(this.destinationPorts);
    }

    /**
     * The name which should be used for this bypass traffic setting.
     * 
     */
    @Import(name="name", required=true)
    private Output<String> name;

    /**
     * @return The name which should be used for this bypass traffic setting.
     * 
     */
    public Output<String> name() {
        return this.name;
    }

    /**
     * The protocols any of `ANY`, `TCP`, `ICMP`, `UDP` that shall be bypassed by intrusion detection.
     * 
     */
    @Import(name="protocol", required=true)
    private Output<String> protocol;

    /**
     * @return The protocols any of `ANY`, `TCP`, `ICMP`, `UDP` that shall be bypassed by intrusion detection.
     * 
     */
    public Output<String> protocol() {
        return this.protocol;
    }

    /**
     * Specifies a list of source addresses that shall be bypassed by intrusion detection.
     * 
     */
    @Import(name="sourceAddresses")
    private @Nullable Output<List<String>> sourceAddresses;

    /**
     * @return Specifies a list of source addresses that shall be bypassed by intrusion detection.
     * 
     */
    public Optional<Output<List<String>>> sourceAddresses() {
        return Optional.ofNullable(this.sourceAddresses);
    }

    /**
     * Specifies a list of source IP groups that shall be bypassed by intrusion detection.
     * 
     */
    @Import(name="sourceIpGroups")
    private @Nullable Output<List<String>> sourceIpGroups;

    /**
     * @return Specifies a list of source IP groups that shall be bypassed by intrusion detection.
     * 
     */
    public Optional<Output<List<String>>> sourceIpGroups() {
        return Optional.ofNullable(this.sourceIpGroups);
    }

    private FirewallPolicyIntrusionDetectionTrafficBypassArgs() {}

    private FirewallPolicyIntrusionDetectionTrafficBypassArgs(FirewallPolicyIntrusionDetectionTrafficBypassArgs $) {
        this.description = $.description;
        this.destinationAddresses = $.destinationAddresses;
        this.destinationIpGroups = $.destinationIpGroups;
        this.destinationPorts = $.destinationPorts;
        this.name = $.name;
        this.protocol = $.protocol;
        this.sourceAddresses = $.sourceAddresses;
        this.sourceIpGroups = $.sourceIpGroups;
    }

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

    public static final class Builder {
        private FirewallPolicyIntrusionDetectionTrafficBypassArgs $;

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

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

        /**
         * @param description The description for this bypass traffic setting.
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output<String> description) {
            $.description = description;
            return this;
        }

        /**
         * @param description The description for this bypass traffic setting.
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param destinationAddresses Specifies a list of destination IP addresses that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationAddresses(@Nullable Output<List<String>> destinationAddresses) {
            $.destinationAddresses = destinationAddresses;
            return this;
        }

        /**
         * @param destinationAddresses Specifies a list of destination IP addresses that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationAddresses(List<String> destinationAddresses) {
            return destinationAddresses(Output.of(destinationAddresses));
        }

        /**
         * @param destinationAddresses Specifies a list of destination IP addresses that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationAddresses(String... destinationAddresses) {
            return destinationAddresses(List.of(destinationAddresses));
        }

        /**
         * @param destinationIpGroups Specifies a list of destination IP groups that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationIpGroups(@Nullable Output<List<String>> destinationIpGroups) {
            $.destinationIpGroups = destinationIpGroups;
            return this;
        }

        /**
         * @param destinationIpGroups Specifies a list of destination IP groups that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationIpGroups(List<String> destinationIpGroups) {
            return destinationIpGroups(Output.of(destinationIpGroups));
        }

        /**
         * @param destinationIpGroups Specifies a list of destination IP groups that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationIpGroups(String... destinationIpGroups) {
            return destinationIpGroups(List.of(destinationIpGroups));
        }

        /**
         * @param destinationPorts Specifies a list of destination IP ports that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationPorts(@Nullable Output<List<String>> destinationPorts) {
            $.destinationPorts = destinationPorts;
            return this;
        }

        /**
         * @param destinationPorts Specifies a list of destination IP ports that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationPorts(List<String> destinationPorts) {
            return destinationPorts(Output.of(destinationPorts));
        }

        /**
         * @param destinationPorts Specifies a list of destination IP ports that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder destinationPorts(String... destinationPorts) {
            return destinationPorts(List.of(destinationPorts));
        }

        /**
         * @param name The name which should be used for this bypass traffic setting.
         * 
         * @return builder
         * 
         */
        public Builder name(Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name which should be used for this bypass traffic setting.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param protocol The protocols any of `ANY`, `TCP`, `ICMP`, `UDP` that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder protocol(Output<String> protocol) {
            $.protocol = protocol;
            return this;
        }

        /**
         * @param protocol The protocols any of `ANY`, `TCP`, `ICMP`, `UDP` that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder protocol(String protocol) {
            return protocol(Output.of(protocol));
        }

        /**
         * @param sourceAddresses Specifies a list of source addresses that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder sourceAddresses(@Nullable Output<List<String>> sourceAddresses) {
            $.sourceAddresses = sourceAddresses;
            return this;
        }

        /**
         * @param sourceAddresses Specifies a list of source addresses that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder sourceAddresses(List<String> sourceAddresses) {
            return sourceAddresses(Output.of(sourceAddresses));
        }

        /**
         * @param sourceAddresses Specifies a list of source addresses that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder sourceAddresses(String... sourceAddresses) {
            return sourceAddresses(List.of(sourceAddresses));
        }

        /**
         * @param sourceIpGroups Specifies a list of source IP groups that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder sourceIpGroups(@Nullable Output<List<String>> sourceIpGroups) {
            $.sourceIpGroups = sourceIpGroups;
            return this;
        }

        /**
         * @param sourceIpGroups Specifies a list of source IP groups that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder sourceIpGroups(List<String> sourceIpGroups) {
            return sourceIpGroups(Output.of(sourceIpGroups));
        }

        /**
         * @param sourceIpGroups Specifies a list of source IP groups that shall be bypassed by intrusion detection.
         * 
         * @return builder
         * 
         */
        public Builder sourceIpGroups(String... sourceIpGroups) {
            return sourceIpGroups(List.of(sourceIpGroups));
        }

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

}
