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

import com.pulumi.core.annotations.CustomType;
import java.lang.String;
import java.util.Objects;

@CustomType
public final class RuleGroupRuleGroupRulesSourceStatefulRuleHeader {
    /**
     * @return The destination IP address or address range to inspect for, in CIDR notation. To match with any address, specify `ANY`.
     * 
     */
    private String destination;
    /**
     * @return The destination port to inspect for. To match with any address, specify `ANY`.
     * 
     */
    private String destinationPort;
    /**
     * @return The direction of traffic flow to inspect. Valid values: `ANY` or `FORWARD`.
     * 
     */
    private String direction;
    /**
     * @return The protocol to inspect. Valid values: `IP`, `TCP`, `UDP`, `ICMP`, `HTTP`, `FTP`, `TLS`, `SMB`, `DNS`, `DCERPC`, `SSH`, `SMTP`, `IMAP`, `MSN`, `KRB5`, `IKEV2`, `TFTP`, `NTP`, `DHCP`.
     * 
     */
    private String protocol;
    /**
     * @return The source IP address or address range for, in CIDR notation. To match with any address, specify `ANY`.
     * 
     */
    private String source;
    /**
     * @return The source port to inspect for. To match with any address, specify `ANY`.
     * 
     */
    private String sourcePort;

    private RuleGroupRuleGroupRulesSourceStatefulRuleHeader() {}
    /**
     * @return The destination IP address or address range to inspect for, in CIDR notation. To match with any address, specify `ANY`.
     * 
     */
    public String destination() {
        return this.destination;
    }
    /**
     * @return The destination port to inspect for. To match with any address, specify `ANY`.
     * 
     */
    public String destinationPort() {
        return this.destinationPort;
    }
    /**
     * @return The direction of traffic flow to inspect. Valid values: `ANY` or `FORWARD`.
     * 
     */
    public String direction() {
        return this.direction;
    }
    /**
     * @return The protocol to inspect. Valid values: `IP`, `TCP`, `UDP`, `ICMP`, `HTTP`, `FTP`, `TLS`, `SMB`, `DNS`, `DCERPC`, `SSH`, `SMTP`, `IMAP`, `MSN`, `KRB5`, `IKEV2`, `TFTP`, `NTP`, `DHCP`.
     * 
     */
    public String protocol() {
        return this.protocol;
    }
    /**
     * @return The source IP address or address range for, in CIDR notation. To match with any address, specify `ANY`.
     * 
     */
    public String source() {
        return this.source;
    }
    /**
     * @return The source port to inspect for. To match with any address, specify `ANY`.
     * 
     */
    public String sourcePort() {
        return this.sourcePort;
    }

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

    public static Builder builder(RuleGroupRuleGroupRulesSourceStatefulRuleHeader defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private String destination;
        private String destinationPort;
        private String direction;
        private String protocol;
        private String source;
        private String sourcePort;
        public Builder() {}
        public Builder(RuleGroupRuleGroupRulesSourceStatefulRuleHeader defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.destination = defaults.destination;
    	      this.destinationPort = defaults.destinationPort;
    	      this.direction = defaults.direction;
    	      this.protocol = defaults.protocol;
    	      this.source = defaults.source;
    	      this.sourcePort = defaults.sourcePort;
        }

        @CustomType.Setter
        public Builder destination(String destination) {
            this.destination = Objects.requireNonNull(destination);
            return this;
        }
        @CustomType.Setter
        public Builder destinationPort(String destinationPort) {
            this.destinationPort = Objects.requireNonNull(destinationPort);
            return this;
        }
        @CustomType.Setter
        public Builder direction(String direction) {
            this.direction = Objects.requireNonNull(direction);
            return this;
        }
        @CustomType.Setter
        public Builder protocol(String protocol) {
            this.protocol = Objects.requireNonNull(protocol);
            return this;
        }
        @CustomType.Setter
        public Builder source(String source) {
            this.source = Objects.requireNonNull(source);
            return this;
        }
        @CustomType.Setter
        public Builder sourcePort(String sourcePort) {
            this.sourcePort = Objects.requireNonNull(sourcePort);
            return this;
        }
        public RuleGroupRuleGroupRulesSourceStatefulRuleHeader build() {
            final var o = new RuleGroupRuleGroupRulesSourceStatefulRuleHeader();
            o.destination = destination;
            o.destinationPort = destinationPort;
            o.direction = direction;
            o.protocol = protocol;
            o.source = source;
            o.sourcePort = sourcePort;
            return o;
        }
    }
}
