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

import com.pulumi.azure.mobile.outputs.NetworkServiceServiceQosPolicyMaximumBitRate;
import com.pulumi.core.annotations.CustomType;
import java.lang.Integer;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class NetworkServiceServiceQosPolicy {
    /**
     * @return QoS Flow allocation and retention priority (ARP) level. Flows with higher priority preempt flows with lower priority, if the settings of `preemption_capability` and `preemption_vulnerability` allow it. 1 is the highest level of priority. If this field is not specified then `qos_indicator` is used to derive the ARP value. Defaults to `9`. See 3GPP TS23.501 section 5.7.2.2 for a full description of the ARP parameters.
     * 
     */
    private @Nullable Integer allocationAndRetentionPriorityLevel;
    /**
     * @return A `maximum_bit_rate` block as defined below. The Maximum Bit Rate (MBR) for all service data flows that use this PCC Rule or Service.
     * 
     */
    private NetworkServiceServiceQosPolicyMaximumBitRate maximumBitRate;
    /**
     * @return The Preemption Capability of a QoS Flow controls whether it can preempt another QoS Flow with a lower priority level. See 3GPP TS23.501 section 5.7.2.2 for a full description of the ARP parameters. Possible values are `NotPreempt` and `MayPreempt`, Defaults to `NotPreempt`.
     * 
     */
    private @Nullable String preemptionCapability;
    /**
     * @return The Preemption Vulnerability of a QoS Flow controls whether it can be preempted by QoS Flow with a higher priority level. See 3GPP TS23.501 section 5.7.2.2 for a full description of the ARP parameters. Possible values are `NotPreemptable` and `Preemptable`. Defaults to `Preemptable`.
     * 
     */
    private @Nullable String preemptionVulnerability;
    /**
     * @return The QoS Indicator (5QI for 5G network /QCI for 4G net work) value identifies a set of QoS characteristics that control QoS forwarding treatment for QoS flows or EPS bearers. Recommended values: 5-9; 69-70; 79-80. Must be between `1` and `127`. Defaults to `9`.
     * 
     */
    private @Nullable Integer qosIndicator;

    private NetworkServiceServiceQosPolicy() {}
    /**
     * @return QoS Flow allocation and retention priority (ARP) level. Flows with higher priority preempt flows with lower priority, if the settings of `preemption_capability` and `preemption_vulnerability` allow it. 1 is the highest level of priority. If this field is not specified then `qos_indicator` is used to derive the ARP value. Defaults to `9`. See 3GPP TS23.501 section 5.7.2.2 for a full description of the ARP parameters.
     * 
     */
    public Optional<Integer> allocationAndRetentionPriorityLevel() {
        return Optional.ofNullable(this.allocationAndRetentionPriorityLevel);
    }
    /**
     * @return A `maximum_bit_rate` block as defined below. The Maximum Bit Rate (MBR) for all service data flows that use this PCC Rule or Service.
     * 
     */
    public NetworkServiceServiceQosPolicyMaximumBitRate maximumBitRate() {
        return this.maximumBitRate;
    }
    /**
     * @return The Preemption Capability of a QoS Flow controls whether it can preempt another QoS Flow with a lower priority level. See 3GPP TS23.501 section 5.7.2.2 for a full description of the ARP parameters. Possible values are `NotPreempt` and `MayPreempt`, Defaults to `NotPreempt`.
     * 
     */
    public Optional<String> preemptionCapability() {
        return Optional.ofNullable(this.preemptionCapability);
    }
    /**
     * @return The Preemption Vulnerability of a QoS Flow controls whether it can be preempted by QoS Flow with a higher priority level. See 3GPP TS23.501 section 5.7.2.2 for a full description of the ARP parameters. Possible values are `NotPreemptable` and `Preemptable`. Defaults to `Preemptable`.
     * 
     */
    public Optional<String> preemptionVulnerability() {
        return Optional.ofNullable(this.preemptionVulnerability);
    }
    /**
     * @return The QoS Indicator (5QI for 5G network /QCI for 4G net work) value identifies a set of QoS characteristics that control QoS forwarding treatment for QoS flows or EPS bearers. Recommended values: 5-9; 69-70; 79-80. Must be between `1` and `127`. Defaults to `9`.
     * 
     */
    public Optional<Integer> qosIndicator() {
        return Optional.ofNullable(this.qosIndicator);
    }

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

    public static Builder builder(NetworkServiceServiceQosPolicy defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable Integer allocationAndRetentionPriorityLevel;
        private NetworkServiceServiceQosPolicyMaximumBitRate maximumBitRate;
        private @Nullable String preemptionCapability;
        private @Nullable String preemptionVulnerability;
        private @Nullable Integer qosIndicator;
        public Builder() {}
        public Builder(NetworkServiceServiceQosPolicy defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.allocationAndRetentionPriorityLevel = defaults.allocationAndRetentionPriorityLevel;
    	      this.maximumBitRate = defaults.maximumBitRate;
    	      this.preemptionCapability = defaults.preemptionCapability;
    	      this.preemptionVulnerability = defaults.preemptionVulnerability;
    	      this.qosIndicator = defaults.qosIndicator;
        }

        @CustomType.Setter
        public Builder allocationAndRetentionPriorityLevel(@Nullable Integer allocationAndRetentionPriorityLevel) {
            this.allocationAndRetentionPriorityLevel = allocationAndRetentionPriorityLevel;
            return this;
        }
        @CustomType.Setter
        public Builder maximumBitRate(NetworkServiceServiceQosPolicyMaximumBitRate maximumBitRate) {
            this.maximumBitRate = Objects.requireNonNull(maximumBitRate);
            return this;
        }
        @CustomType.Setter
        public Builder preemptionCapability(@Nullable String preemptionCapability) {
            this.preemptionCapability = preemptionCapability;
            return this;
        }
        @CustomType.Setter
        public Builder preemptionVulnerability(@Nullable String preemptionVulnerability) {
            this.preemptionVulnerability = preemptionVulnerability;
            return this;
        }
        @CustomType.Setter
        public Builder qosIndicator(@Nullable Integer qosIndicator) {
            this.qosIndicator = qosIndicator;
            return this;
        }
        public NetworkServiceServiceQosPolicy build() {
            final var o = new NetworkServiceServiceQosPolicy();
            o.allocationAndRetentionPriorityLevel = allocationAndRetentionPriorityLevel;
            o.maximumBitRate = maximumBitRate;
            o.preemptionCapability = preemptionCapability;
            o.preemptionVulnerability = preemptionVulnerability;
            o.qosIndicator = qosIndicator;
            return o;
        }
    }
}
