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

import com.pulumi.aws.outputs.GetAvailabilityZonesFilter;
import com.pulumi.core.annotations.CustomType;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class GetAvailabilityZonesResult {
    private @Nullable Boolean allAvailabilityZones;
    private @Nullable List<String> excludeNames;
    private @Nullable List<String> excludeZoneIds;
    private @Nullable List<GetAvailabilityZonesFilter> filters;
    /**
     * @return A set of the Availability Zone Group names. For Availability Zones, this is the same value as the Region name. For Local Zones, the name of the associated group, for example `us-west-2-lax-1`.
     * 
     */
    private List<String> groupNames;
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    private String id;
    /**
     * @return List of the Availability Zone names available to the account.
     * 
     */
    private List<String> names;
    private @Nullable String state;
    /**
     * @return List of the Availability Zone IDs available to the account.
     * 
     */
    private List<String> zoneIds;

    private GetAvailabilityZonesResult() {}
    public Optional<Boolean> allAvailabilityZones() {
        return Optional.ofNullable(this.allAvailabilityZones);
    }
    public List<String> excludeNames() {
        return this.excludeNames == null ? List.of() : this.excludeNames;
    }
    public List<String> excludeZoneIds() {
        return this.excludeZoneIds == null ? List.of() : this.excludeZoneIds;
    }
    public List<GetAvailabilityZonesFilter> filters() {
        return this.filters == null ? List.of() : this.filters;
    }
    /**
     * @return A set of the Availability Zone Group names. For Availability Zones, this is the same value as the Region name. For Local Zones, the name of the associated group, for example `us-west-2-lax-1`.
     * 
     */
    public List<String> groupNames() {
        return this.groupNames;
    }
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    public String id() {
        return this.id;
    }
    /**
     * @return List of the Availability Zone names available to the account.
     * 
     */
    public List<String> names() {
        return this.names;
    }
    public Optional<String> state() {
        return Optional.ofNullable(this.state);
    }
    /**
     * @return List of the Availability Zone IDs available to the account.
     * 
     */
    public List<String> zoneIds() {
        return this.zoneIds;
    }

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

    public static Builder builder(GetAvailabilityZonesResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable Boolean allAvailabilityZones;
        private @Nullable List<String> excludeNames;
        private @Nullable List<String> excludeZoneIds;
        private @Nullable List<GetAvailabilityZonesFilter> filters;
        private List<String> groupNames;
        private String id;
        private List<String> names;
        private @Nullable String state;
        private List<String> zoneIds;
        public Builder() {}
        public Builder(GetAvailabilityZonesResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.allAvailabilityZones = defaults.allAvailabilityZones;
    	      this.excludeNames = defaults.excludeNames;
    	      this.excludeZoneIds = defaults.excludeZoneIds;
    	      this.filters = defaults.filters;
    	      this.groupNames = defaults.groupNames;
    	      this.id = defaults.id;
    	      this.names = defaults.names;
    	      this.state = defaults.state;
    	      this.zoneIds = defaults.zoneIds;
        }

        @CustomType.Setter
        public Builder allAvailabilityZones(@Nullable Boolean allAvailabilityZones) {
            this.allAvailabilityZones = allAvailabilityZones;
            return this;
        }
        @CustomType.Setter
        public Builder excludeNames(@Nullable List<String> excludeNames) {
            this.excludeNames = excludeNames;
            return this;
        }
        public Builder excludeNames(String... excludeNames) {
            return excludeNames(List.of(excludeNames));
        }
        @CustomType.Setter
        public Builder excludeZoneIds(@Nullable List<String> excludeZoneIds) {
            this.excludeZoneIds = excludeZoneIds;
            return this;
        }
        public Builder excludeZoneIds(String... excludeZoneIds) {
            return excludeZoneIds(List.of(excludeZoneIds));
        }
        @CustomType.Setter
        public Builder filters(@Nullable List<GetAvailabilityZonesFilter> filters) {
            this.filters = filters;
            return this;
        }
        public Builder filters(GetAvailabilityZonesFilter... filters) {
            return filters(List.of(filters));
        }
        @CustomType.Setter
        public Builder groupNames(List<String> groupNames) {
            this.groupNames = Objects.requireNonNull(groupNames);
            return this;
        }
        public Builder groupNames(String... groupNames) {
            return groupNames(List.of(groupNames));
        }
        @CustomType.Setter
        public Builder id(String id) {
            this.id = Objects.requireNonNull(id);
            return this;
        }
        @CustomType.Setter
        public Builder names(List<String> names) {
            this.names = Objects.requireNonNull(names);
            return this;
        }
        public Builder names(String... names) {
            return names(List.of(names));
        }
        @CustomType.Setter
        public Builder state(@Nullable String state) {
            this.state = state;
            return this;
        }
        @CustomType.Setter
        public Builder zoneIds(List<String> zoneIds) {
            this.zoneIds = Objects.requireNonNull(zoneIds);
            return this;
        }
        public Builder zoneIds(String... zoneIds) {
            return zoneIds(List.of(zoneIds));
        }
        public GetAvailabilityZonesResult build() {
            final var o = new GetAvailabilityZonesResult();
            o.allAvailabilityZones = allAvailabilityZones;
            o.excludeNames = excludeNames;
            o.excludeZoneIds = excludeZoneIds;
            o.filters = filters;
            o.groupNames = groupNames;
            o.id = id;
            o.names = names;
            o.state = state;
            o.zoneIds = zoneIds;
            return o;
        }
    }
}
