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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final TrailAdvancedEventSelectorFieldSelectorArgs Empty = new TrailAdvancedEventSelectorFieldSelectorArgs();

    /**
     * A list of values that includes events that match the last few characters of the event record field specified as the value of `field`.
     * 
     */
    @Import(name="endsWiths")
    private @Nullable Output<List<String>> endsWiths;

    /**
     * @return A list of values that includes events that match the last few characters of the event record field specified as the value of `field`.
     * 
     */
    public Optional<Output<List<String>>> endsWiths() {
        return Optional.ofNullable(this.endsWiths);
    }

    /**
     * A list of values that includes events that match the exact value of the event record field specified as the value of `field`. This is the only valid operator that you can use with the `readOnly`, `eventCategory`, and `resources.type` fields.
     * 
     */
    @Import(name="equals")
    private @Nullable Output<List<String>> equals;

    /**
     * @return A list of values that includes events that match the exact value of the event record field specified as the value of `field`. This is the only valid operator that you can use with the `readOnly`, `eventCategory`, and `resources.type` fields.
     * 
     */
    public Optional<Output<List<String>>> equals_() {
        return Optional.ofNullable(this.equals);
    }

    /**
     * Field in an event record on which to filter events to be logged. You can specify only the following values: `readOnly`, `eventSource`, `eventName`, `eventCategory`, `resources.type`, `resources.ARN`.
     * 
     */
    @Import(name="field", required=true)
    private Output<String> field;

    /**
     * @return Field in an event record on which to filter events to be logged. You can specify only the following values: `readOnly`, `eventSource`, `eventName`, `eventCategory`, `resources.type`, `resources.ARN`.
     * 
     */
    public Output<String> field() {
        return this.field;
    }

    /**
     * A list of values that excludes events that match the last few characters of the event record field specified as the value of `field`.
     * 
     */
    @Import(name="notEndsWiths")
    private @Nullable Output<List<String>> notEndsWiths;

    /**
     * @return A list of values that excludes events that match the last few characters of the event record field specified as the value of `field`.
     * 
     */
    public Optional<Output<List<String>>> notEndsWiths() {
        return Optional.ofNullable(this.notEndsWiths);
    }

    /**
     * A list of values that excludes events that match the exact value of the event record field specified as the value of `field`.
     * 
     */
    @Import(name="notEquals")
    private @Nullable Output<List<String>> notEquals;

    /**
     * @return A list of values that excludes events that match the exact value of the event record field specified as the value of `field`.
     * 
     */
    public Optional<Output<List<String>>> notEquals() {
        return Optional.ofNullable(this.notEquals);
    }

    /**
     * A list of values that excludes events that match the first few characters of the event record field specified as the value of `field`.
     * 
     */
    @Import(name="notStartsWiths")
    private @Nullable Output<List<String>> notStartsWiths;

    /**
     * @return A list of values that excludes events that match the first few characters of the event record field specified as the value of `field`.
     * 
     */
    public Optional<Output<List<String>>> notStartsWiths() {
        return Optional.ofNullable(this.notStartsWiths);
    }

    /**
     * A list of values that includes events that match the first few characters of the event record field specified as the value of `field`.
     * 
     */
    @Import(name="startsWiths")
    private @Nullable Output<List<String>> startsWiths;

    /**
     * @return A list of values that includes events that match the first few characters of the event record field specified as the value of `field`.
     * 
     */
    public Optional<Output<List<String>>> startsWiths() {
        return Optional.ofNullable(this.startsWiths);
    }

    private TrailAdvancedEventSelectorFieldSelectorArgs() {}

    private TrailAdvancedEventSelectorFieldSelectorArgs(TrailAdvancedEventSelectorFieldSelectorArgs $) {
        this.endsWiths = $.endsWiths;
        this.equals = $.equals;
        this.field = $.field;
        this.notEndsWiths = $.notEndsWiths;
        this.notEquals = $.notEquals;
        this.notStartsWiths = $.notStartsWiths;
        this.startsWiths = $.startsWiths;
    }

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

    public static final class Builder {
        private TrailAdvancedEventSelectorFieldSelectorArgs $;

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

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

        /**
         * @param endsWiths A list of values that includes events that match the last few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder endsWiths(@Nullable Output<List<String>> endsWiths) {
            $.endsWiths = endsWiths;
            return this;
        }

        /**
         * @param endsWiths A list of values that includes events that match the last few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder endsWiths(List<String> endsWiths) {
            return endsWiths(Output.of(endsWiths));
        }

        /**
         * @param endsWiths A list of values that includes events that match the last few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder endsWiths(String... endsWiths) {
            return endsWiths(List.of(endsWiths));
        }

        /**
         * @param equals A list of values that includes events that match the exact value of the event record field specified as the value of `field`. This is the only valid operator that you can use with the `readOnly`, `eventCategory`, and `resources.type` fields.
         * 
         * @return builder
         * 
         */
        public Builder equals_(@Nullable Output<List<String>> equals) {
            $.equals = equals;
            return this;
        }

        /**
         * @param equals A list of values that includes events that match the exact value of the event record field specified as the value of `field`. This is the only valid operator that you can use with the `readOnly`, `eventCategory`, and `resources.type` fields.
         * 
         * @return builder
         * 
         */
        public Builder equals_(List<String> equals) {
            return equals_(Output.of(equals));
        }

        /**
         * @param equals A list of values that includes events that match the exact value of the event record field specified as the value of `field`. This is the only valid operator that you can use with the `readOnly`, `eventCategory`, and `resources.type` fields.
         * 
         * @return builder
         * 
         */
        public Builder equals_(String... equals) {
            return equals_(List.of(equals));
        }

        /**
         * @param field Field in an event record on which to filter events to be logged. You can specify only the following values: `readOnly`, `eventSource`, `eventName`, `eventCategory`, `resources.type`, `resources.ARN`.
         * 
         * @return builder
         * 
         */
        public Builder field(Output<String> field) {
            $.field = field;
            return this;
        }

        /**
         * @param field Field in an event record on which to filter events to be logged. You can specify only the following values: `readOnly`, `eventSource`, `eventName`, `eventCategory`, `resources.type`, `resources.ARN`.
         * 
         * @return builder
         * 
         */
        public Builder field(String field) {
            return field(Output.of(field));
        }

        /**
         * @param notEndsWiths A list of values that excludes events that match the last few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notEndsWiths(@Nullable Output<List<String>> notEndsWiths) {
            $.notEndsWiths = notEndsWiths;
            return this;
        }

        /**
         * @param notEndsWiths A list of values that excludes events that match the last few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notEndsWiths(List<String> notEndsWiths) {
            return notEndsWiths(Output.of(notEndsWiths));
        }

        /**
         * @param notEndsWiths A list of values that excludes events that match the last few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notEndsWiths(String... notEndsWiths) {
            return notEndsWiths(List.of(notEndsWiths));
        }

        /**
         * @param notEquals A list of values that excludes events that match the exact value of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notEquals(@Nullable Output<List<String>> notEquals) {
            $.notEquals = notEquals;
            return this;
        }

        /**
         * @param notEquals A list of values that excludes events that match the exact value of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notEquals(List<String> notEquals) {
            return notEquals(Output.of(notEquals));
        }

        /**
         * @param notEquals A list of values that excludes events that match the exact value of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notEquals(String... notEquals) {
            return notEquals(List.of(notEquals));
        }

        /**
         * @param notStartsWiths A list of values that excludes events that match the first few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notStartsWiths(@Nullable Output<List<String>> notStartsWiths) {
            $.notStartsWiths = notStartsWiths;
            return this;
        }

        /**
         * @param notStartsWiths A list of values that excludes events that match the first few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notStartsWiths(List<String> notStartsWiths) {
            return notStartsWiths(Output.of(notStartsWiths));
        }

        /**
         * @param notStartsWiths A list of values that excludes events that match the first few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder notStartsWiths(String... notStartsWiths) {
            return notStartsWiths(List.of(notStartsWiths));
        }

        /**
         * @param startsWiths A list of values that includes events that match the first few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder startsWiths(@Nullable Output<List<String>> startsWiths) {
            $.startsWiths = startsWiths;
            return this;
        }

        /**
         * @param startsWiths A list of values that includes events that match the first few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder startsWiths(List<String> startsWiths) {
            return startsWiths(Output.of(startsWiths));
        }

        /**
         * @param startsWiths A list of values that includes events that match the first few characters of the event record field specified as the value of `field`.
         * 
         * @return builder
         * 
         */
        public Builder startsWiths(String... startsWiths) {
            return startsWiths(List.of(startsWiths));
        }

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

}
