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

import com.pulumi.aws.route53.inputs.ResolverRuleTargetIpArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final ResolverRuleState Empty = new ResolverRuleState();

    /**
     * The ARN (Amazon Resource Name) for the resolver rule.
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return The ARN (Amazon Resource Name) for the resolver rule.
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * DNS queries for this domain name are forwarded to the IP addresses that are specified using `target_ip`.
     * 
     */
    @Import(name="domainName")
    private @Nullable Output<String> domainName;

    /**
     * @return DNS queries for this domain name are forwarded to the IP addresses that are specified using `target_ip`.
     * 
     */
    public Optional<Output<String>> domainName() {
        return Optional.ofNullable(this.domainName);
    }

    /**
     * A friendly name that lets you easily find a rule in the Resolver dashboard in the Route 53 console.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return A friendly name that lets you easily find a rule in the Resolver dashboard in the Route 53 console.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * When a rule is shared with another AWS account, the account ID of the account that the rule is shared with.
     * 
     */
    @Import(name="ownerId")
    private @Nullable Output<String> ownerId;

    /**
     * @return When a rule is shared with another AWS account, the account ID of the account that the rule is shared with.
     * 
     */
    public Optional<Output<String>> ownerId() {
        return Optional.ofNullable(this.ownerId);
    }

    /**
     * The ID of the outbound resolver endpoint that you want to use to route DNS queries to the IP addresses that you specify using `target_ip`.
     * This argument should only be specified for `FORWARD` type rules.
     * 
     */
    @Import(name="resolverEndpointId")
    private @Nullable Output<String> resolverEndpointId;

    /**
     * @return The ID of the outbound resolver endpoint that you want to use to route DNS queries to the IP addresses that you specify using `target_ip`.
     * This argument should only be specified for `FORWARD` type rules.
     * 
     */
    public Optional<Output<String>> resolverEndpointId() {
        return Optional.ofNullable(this.resolverEndpointId);
    }

    /**
     * The rule type. Valid values are `FORWARD`, `SYSTEM` and `RECURSIVE`.
     * 
     */
    @Import(name="ruleType")
    private @Nullable Output<String> ruleType;

    /**
     * @return The rule type. Valid values are `FORWARD`, `SYSTEM` and `RECURSIVE`.
     * 
     */
    public Optional<Output<String>> ruleType() {
        return Optional.ofNullable(this.ruleType);
    }

    /**
     * Whether the rules is shared and, if so, whether the current account is sharing the rule with another account, or another account is sharing the rule with the current account.
     * Values are `NOT_SHARED`, `SHARED_BY_ME` or `SHARED_WITH_ME`
     * 
     */
    @Import(name="shareStatus")
    private @Nullable Output<String> shareStatus;

    /**
     * @return Whether the rules is shared and, if so, whether the current account is sharing the rule with another account, or another account is sharing the rule with the current account.
     * Values are `NOT_SHARED`, `SHARED_BY_ME` or `SHARED_WITH_ME`
     * 
     */
    public Optional<Output<String>> shareStatus() {
        return Optional.ofNullable(this.shareStatus);
    }

    /**
     * A map of tags to assign to the resource. .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 A map of tags to assign to the resource. .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);
    }

    /**
     * Configuration block(s) indicating the IPs that you want Resolver to forward DNS queries to (documented below).
     * This argument should only be specified for `FORWARD` type rules.
     * 
     */
    @Import(name="targetIps")
    private @Nullable Output<List<ResolverRuleTargetIpArgs>> targetIps;

    /**
     * @return Configuration block(s) indicating the IPs that you want Resolver to forward DNS queries to (documented below).
     * This argument should only be specified for `FORWARD` type rules.
     * 
     */
    public Optional<Output<List<ResolverRuleTargetIpArgs>>> targetIps() {
        return Optional.ofNullable(this.targetIps);
    }

    private ResolverRuleState() {}

    private ResolverRuleState(ResolverRuleState $) {
        this.arn = $.arn;
        this.domainName = $.domainName;
        this.name = $.name;
        this.ownerId = $.ownerId;
        this.resolverEndpointId = $.resolverEndpointId;
        this.ruleType = $.ruleType;
        this.shareStatus = $.shareStatus;
        this.tags = $.tags;
        this.tagsAll = $.tagsAll;
        this.targetIps = $.targetIps;
    }

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

    public static final class Builder {
        private ResolverRuleState $;

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

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

        /**
         * @param arn The ARN (Amazon Resource Name) for the resolver rule.
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn The ARN (Amazon Resource Name) for the resolver rule.
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param domainName DNS queries for this domain name are forwarded to the IP addresses that are specified using `target_ip`.
         * 
         * @return builder
         * 
         */
        public Builder domainName(@Nullable Output<String> domainName) {
            $.domainName = domainName;
            return this;
        }

        /**
         * @param domainName DNS queries for this domain name are forwarded to the IP addresses that are specified using `target_ip`.
         * 
         * @return builder
         * 
         */
        public Builder domainName(String domainName) {
            return domainName(Output.of(domainName));
        }

        /**
         * @param name A friendly name that lets you easily find a rule in the Resolver dashboard in the Route 53 console.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name A friendly name that lets you easily find a rule in the Resolver dashboard in the Route 53 console.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param ownerId When a rule is shared with another AWS account, the account ID of the account that the rule is shared with.
         * 
         * @return builder
         * 
         */
        public Builder ownerId(@Nullable Output<String> ownerId) {
            $.ownerId = ownerId;
            return this;
        }

        /**
         * @param ownerId When a rule is shared with another AWS account, the account ID of the account that the rule is shared with.
         * 
         * @return builder
         * 
         */
        public Builder ownerId(String ownerId) {
            return ownerId(Output.of(ownerId));
        }

        /**
         * @param resolverEndpointId The ID of the outbound resolver endpoint that you want to use to route DNS queries to the IP addresses that you specify using `target_ip`.
         * This argument should only be specified for `FORWARD` type rules.
         * 
         * @return builder
         * 
         */
        public Builder resolverEndpointId(@Nullable Output<String> resolverEndpointId) {
            $.resolverEndpointId = resolverEndpointId;
            return this;
        }

        /**
         * @param resolverEndpointId The ID of the outbound resolver endpoint that you want to use to route DNS queries to the IP addresses that you specify using `target_ip`.
         * This argument should only be specified for `FORWARD` type rules.
         * 
         * @return builder
         * 
         */
        public Builder resolverEndpointId(String resolverEndpointId) {
            return resolverEndpointId(Output.of(resolverEndpointId));
        }

        /**
         * @param ruleType The rule type. Valid values are `FORWARD`, `SYSTEM` and `RECURSIVE`.
         * 
         * @return builder
         * 
         */
        public Builder ruleType(@Nullable Output<String> ruleType) {
            $.ruleType = ruleType;
            return this;
        }

        /**
         * @param ruleType The rule type. Valid values are `FORWARD`, `SYSTEM` and `RECURSIVE`.
         * 
         * @return builder
         * 
         */
        public Builder ruleType(String ruleType) {
            return ruleType(Output.of(ruleType));
        }

        /**
         * @param shareStatus Whether the rules is shared and, if so, whether the current account is sharing the rule with another account, or another account is sharing the rule with the current account.
         * Values are `NOT_SHARED`, `SHARED_BY_ME` or `SHARED_WITH_ME`
         * 
         * @return builder
         * 
         */
        public Builder shareStatus(@Nullable Output<String> shareStatus) {
            $.shareStatus = shareStatus;
            return this;
        }

        /**
         * @param shareStatus Whether the rules is shared and, if so, whether the current account is sharing the rule with another account, or another account is sharing the rule with the current account.
         * Values are `NOT_SHARED`, `SHARED_BY_ME` or `SHARED_WITH_ME`
         * 
         * @return builder
         * 
         */
        public Builder shareStatus(String shareStatus) {
            return shareStatus(Output.of(shareStatus));
        }

        /**
         * @param tags A map of tags to assign to the resource. .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 A map of tags to assign to the resource. .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));
        }

        /**
         * @param targetIps Configuration block(s) indicating the IPs that you want Resolver to forward DNS queries to (documented below).
         * This argument should only be specified for `FORWARD` type rules.
         * 
         * @return builder
         * 
         */
        public Builder targetIps(@Nullable Output<List<ResolverRuleTargetIpArgs>> targetIps) {
            $.targetIps = targetIps;
            return this;
        }

        /**
         * @param targetIps Configuration block(s) indicating the IPs that you want Resolver to forward DNS queries to (documented below).
         * This argument should only be specified for `FORWARD` type rules.
         * 
         * @return builder
         * 
         */
        public Builder targetIps(List<ResolverRuleTargetIpArgs> targetIps) {
            return targetIps(Output.of(targetIps));
        }

        /**
         * @param targetIps Configuration block(s) indicating the IPs that you want Resolver to forward DNS queries to (documented below).
         * This argument should only be specified for `FORWARD` type rules.
         * 
         * @return builder
         * 
         */
        public Builder targetIps(ResolverRuleTargetIpArgs... targetIps) {
            return targetIps(List.of(targetIps));
        }

        public ResolverRuleState build() {
            return $;
        }
    }

}
