// *** 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.azure.network.inputs.ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final ExpressRouteCircuitPeeringIpv6Args Empty = new ExpressRouteCircuitPeeringIpv6Args();

    /**
     * A boolean value indicating whether the IPv6 peering is enabled. Defaults to `true`.
     * 
     */
    @Import(name="enabled")
    private @Nullable Output<Boolean> enabled;

    /**
     * @return A boolean value indicating whether the IPv6 peering is enabled. Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> enabled() {
        return Optional.ofNullable(this.enabled);
    }

    /**
     * A `microsoft_peering` block as defined below.
     * 
     */
    @Import(name="microsoftPeering")
    private @Nullable Output<ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs> microsoftPeering;

    /**
     * @return A `microsoft_peering` block as defined below.
     * 
     */
    public Optional<Output<ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs>> microsoftPeering() {
        return Optional.ofNullable(this.microsoftPeering);
    }

    /**
     * A subnet for the primary link.
     * 
     */
    @Import(name="primaryPeerAddressPrefix", required=true)
    private Output<String> primaryPeerAddressPrefix;

    /**
     * @return A subnet for the primary link.
     * 
     */
    public Output<String> primaryPeerAddressPrefix() {
        return this.primaryPeerAddressPrefix;
    }

    /**
     * The ID of the Route Filter. Only available when `peering_type` is set to `MicrosoftPeering`.
     * 
     * &gt; **NOTE:** `ipv6` can be specified when `peering_type` is `MicrosoftPeering` or `AzurePrivatePeering`
     * 
     */
    @Import(name="routeFilterId")
    private @Nullable Output<String> routeFilterId;

    /**
     * @return The ID of the Route Filter. Only available when `peering_type` is set to `MicrosoftPeering`.
     * 
     * &gt; **NOTE:** `ipv6` can be specified when `peering_type` is `MicrosoftPeering` or `AzurePrivatePeering`
     * 
     */
    public Optional<Output<String>> routeFilterId() {
        return Optional.ofNullable(this.routeFilterId);
    }

    /**
     * A subnet for the secondary link.
     * 
     */
    @Import(name="secondaryPeerAddressPrefix", required=true)
    private Output<String> secondaryPeerAddressPrefix;

    /**
     * @return A subnet for the secondary link.
     * 
     */
    public Output<String> secondaryPeerAddressPrefix() {
        return this.secondaryPeerAddressPrefix;
    }

    private ExpressRouteCircuitPeeringIpv6Args() {}

    private ExpressRouteCircuitPeeringIpv6Args(ExpressRouteCircuitPeeringIpv6Args $) {
        this.enabled = $.enabled;
        this.microsoftPeering = $.microsoftPeering;
        this.primaryPeerAddressPrefix = $.primaryPeerAddressPrefix;
        this.routeFilterId = $.routeFilterId;
        this.secondaryPeerAddressPrefix = $.secondaryPeerAddressPrefix;
    }

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

    public static final class Builder {
        private ExpressRouteCircuitPeeringIpv6Args $;

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

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

        /**
         * @param enabled A boolean value indicating whether the IPv6 peering is enabled. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enabled(@Nullable Output<Boolean> enabled) {
            $.enabled = enabled;
            return this;
        }

        /**
         * @param enabled A boolean value indicating whether the IPv6 peering is enabled. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enabled(Boolean enabled) {
            return enabled(Output.of(enabled));
        }

        /**
         * @param microsoftPeering A `microsoft_peering` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder microsoftPeering(@Nullable Output<ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs> microsoftPeering) {
            $.microsoftPeering = microsoftPeering;
            return this;
        }

        /**
         * @param microsoftPeering A `microsoft_peering` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder microsoftPeering(ExpressRouteCircuitPeeringIpv6MicrosoftPeeringArgs microsoftPeering) {
            return microsoftPeering(Output.of(microsoftPeering));
        }

        /**
         * @param primaryPeerAddressPrefix A subnet for the primary link.
         * 
         * @return builder
         * 
         */
        public Builder primaryPeerAddressPrefix(Output<String> primaryPeerAddressPrefix) {
            $.primaryPeerAddressPrefix = primaryPeerAddressPrefix;
            return this;
        }

        /**
         * @param primaryPeerAddressPrefix A subnet for the primary link.
         * 
         * @return builder
         * 
         */
        public Builder primaryPeerAddressPrefix(String primaryPeerAddressPrefix) {
            return primaryPeerAddressPrefix(Output.of(primaryPeerAddressPrefix));
        }

        /**
         * @param routeFilterId The ID of the Route Filter. Only available when `peering_type` is set to `MicrosoftPeering`.
         * 
         * &gt; **NOTE:** `ipv6` can be specified when `peering_type` is `MicrosoftPeering` or `AzurePrivatePeering`
         * 
         * @return builder
         * 
         */
        public Builder routeFilterId(@Nullable Output<String> routeFilterId) {
            $.routeFilterId = routeFilterId;
            return this;
        }

        /**
         * @param routeFilterId The ID of the Route Filter. Only available when `peering_type` is set to `MicrosoftPeering`.
         * 
         * &gt; **NOTE:** `ipv6` can be specified when `peering_type` is `MicrosoftPeering` or `AzurePrivatePeering`
         * 
         * @return builder
         * 
         */
        public Builder routeFilterId(String routeFilterId) {
            return routeFilterId(Output.of(routeFilterId));
        }

        /**
         * @param secondaryPeerAddressPrefix A subnet for the secondary link.
         * 
         * @return builder
         * 
         */
        public Builder secondaryPeerAddressPrefix(Output<String> secondaryPeerAddressPrefix) {
            $.secondaryPeerAddressPrefix = secondaryPeerAddressPrefix;
            return this;
        }

        /**
         * @param secondaryPeerAddressPrefix A subnet for the secondary link.
         * 
         * @return builder
         * 
         */
        public Builder secondaryPeerAddressPrefix(String secondaryPeerAddressPrefix) {
            return secondaryPeerAddressPrefix(Output.of(secondaryPeerAddressPrefix));
        }

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

}
