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

import com.pulumi.azure.datadog.inputs.MonitorTagRuleMetricFilterArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final MonitorTagRuleMetricArgs Empty = new MonitorTagRuleMetricArgs();

    /**
     * A `filter` block as defined below.
     * 
     * &gt; **NOTE:** List of filtering tags to be used for capturing metrics. If empty, all resources will be captured. If only Exclude action is specified, the rules will apply to the list of all available resources. If Include actions are specified, the rules will only include resources with the associated tags.
     * 
     */
    @Import(name="filters")
    private @Nullable Output<List<MonitorTagRuleMetricFilterArgs>> filters;

    /**
     * @return A `filter` block as defined below.
     * 
     * &gt; **NOTE:** List of filtering tags to be used for capturing metrics. If empty, all resources will be captured. If only Exclude action is specified, the rules will apply to the list of all available resources. If Include actions are specified, the rules will only include resources with the associated tags.
     * 
     */
    public Optional<Output<List<MonitorTagRuleMetricFilterArgs>>> filters() {
        return Optional.ofNullable(this.filters);
    }

    private MonitorTagRuleMetricArgs() {}

    private MonitorTagRuleMetricArgs(MonitorTagRuleMetricArgs $) {
        this.filters = $.filters;
    }

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

    public static final class Builder {
        private MonitorTagRuleMetricArgs $;

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

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

        /**
         * @param filters A `filter` block as defined below.
         * 
         * &gt; **NOTE:** List of filtering tags to be used for capturing metrics. If empty, all resources will be captured. If only Exclude action is specified, the rules will apply to the list of all available resources. If Include actions are specified, the rules will only include resources with the associated tags.
         * 
         * @return builder
         * 
         */
        public Builder filters(@Nullable Output<List<MonitorTagRuleMetricFilterArgs>> filters) {
            $.filters = filters;
            return this;
        }

        /**
         * @param filters A `filter` block as defined below.
         * 
         * &gt; **NOTE:** List of filtering tags to be used for capturing metrics. If empty, all resources will be captured. If only Exclude action is specified, the rules will apply to the list of all available resources. If Include actions are specified, the rules will only include resources with the associated tags.
         * 
         * @return builder
         * 
         */
        public Builder filters(List<MonitorTagRuleMetricFilterArgs> filters) {
            return filters(Output.of(filters));
        }

        /**
         * @param filters A `filter` block as defined below.
         * 
         * &gt; **NOTE:** List of filtering tags to be used for capturing metrics. If empty, all resources will be captured. If only Exclude action is specified, the rules will apply to the list of all available resources. If Include actions are specified, the rules will only include resources with the associated tags.
         * 
         * @return builder
         * 
         */
        public Builder filters(MonitorTagRuleMetricFilterArgs... filters) {
            return filters(List.of(filters));
        }

        public MonitorTagRuleMetricArgs build() {
            return $;
        }
    }

}
