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

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

@CustomType
public final class GetVpcIamPoolResult {
    /**
     * @return IP protocol assigned to this pool.
     * 
     */
    private String addressFamily;
    /**
     * @return A default netmask length for allocations added to this pool. If, for example, the CIDR assigned to this pool is `10.0.0.0/8` and you enter 16 here, new allocations will default to `10.0.0.0/16`.
     * 
     */
    private Integer allocationDefaultNetmaskLength;
    /**
     * @return The maximum netmask length that will be required for CIDR allocations in this pool.
     * 
     */
    private Integer allocationMaxNetmaskLength;
    /**
     * @return The minimum netmask length that will be required for CIDR allocations in this pool.
     * 
     */
    private Integer allocationMinNetmaskLength;
    /**
     * @return Tags that are required to create resources in using this pool.
     * 
     */
    private Map<String,String> allocationResourceTags;
    /**
     * @return ARN of the pool
     * 
     */
    private String arn;
    /**
     * @return If enabled, IPAM will continuously look for resources within the CIDR range of this pool and automatically import them as allocations into your IPAM.
     * 
     */
    private Boolean autoImport;
    /**
     * @return Limits which service in AWS that the pool can be used in. `ec2` for example, allows users to use space for Elastic IP addresses and VPCs.
     * 
     */
    private String awsService;
    /**
     * @return Description for the IPAM pool.
     * 
     */
    private String description;
    private @Nullable List<GetVpcIamPoolFilter> filters;
    /**
     * @return ID of the IPAM pool.
     * 
     */
    private @Nullable String id;
    private @Nullable String ipamPoolId;
    /**
     * @return ID of the scope the pool belongs to.
     * 
     */
    private String ipamScopeId;
    private String ipamScopeType;
    /**
     * @return Locale is the Region where your pool is available for allocations. You can only create pools with locales that match the operating Regions of the IPAM. You can only create VPCs from a pool whose locale matches the VPC&#39;s Region.
     * 
     */
    private String locale;
    private Integer poolDepth;
    /**
     * @return Defines whether or not IPv6 pool space is publicly advertisable over the internet.
     * 
     */
    private Boolean publiclyAdvertisable;
    /**
     * @return ID of the source IPAM pool.
     * 
     */
    private String sourceIpamPoolId;
    private String state;
    /**
     * @return Map of tags to assigned to the resource.
     * 
     */
    private Map<String,String> tags;

    private GetVpcIamPoolResult() {}
    /**
     * @return IP protocol assigned to this pool.
     * 
     */
    public String addressFamily() {
        return this.addressFamily;
    }
    /**
     * @return A default netmask length for allocations added to this pool. If, for example, the CIDR assigned to this pool is `10.0.0.0/8` and you enter 16 here, new allocations will default to `10.0.0.0/16`.
     * 
     */
    public Integer allocationDefaultNetmaskLength() {
        return this.allocationDefaultNetmaskLength;
    }
    /**
     * @return The maximum netmask length that will be required for CIDR allocations in this pool.
     * 
     */
    public Integer allocationMaxNetmaskLength() {
        return this.allocationMaxNetmaskLength;
    }
    /**
     * @return The minimum netmask length that will be required for CIDR allocations in this pool.
     * 
     */
    public Integer allocationMinNetmaskLength() {
        return this.allocationMinNetmaskLength;
    }
    /**
     * @return Tags that are required to create resources in using this pool.
     * 
     */
    public Map<String,String> allocationResourceTags() {
        return this.allocationResourceTags;
    }
    /**
     * @return ARN of the pool
     * 
     */
    public String arn() {
        return this.arn;
    }
    /**
     * @return If enabled, IPAM will continuously look for resources within the CIDR range of this pool and automatically import them as allocations into your IPAM.
     * 
     */
    public Boolean autoImport() {
        return this.autoImport;
    }
    /**
     * @return Limits which service in AWS that the pool can be used in. `ec2` for example, allows users to use space for Elastic IP addresses and VPCs.
     * 
     */
    public String awsService() {
        return this.awsService;
    }
    /**
     * @return Description for the IPAM pool.
     * 
     */
    public String description() {
        return this.description;
    }
    public List<GetVpcIamPoolFilter> filters() {
        return this.filters == null ? List.of() : this.filters;
    }
    /**
     * @return ID of the IPAM pool.
     * 
     */
    public Optional<String> id() {
        return Optional.ofNullable(this.id);
    }
    public Optional<String> ipamPoolId() {
        return Optional.ofNullable(this.ipamPoolId);
    }
    /**
     * @return ID of the scope the pool belongs to.
     * 
     */
    public String ipamScopeId() {
        return this.ipamScopeId;
    }
    public String ipamScopeType() {
        return this.ipamScopeType;
    }
    /**
     * @return Locale is the Region where your pool is available for allocations. You can only create pools with locales that match the operating Regions of the IPAM. You can only create VPCs from a pool whose locale matches the VPC&#39;s Region.
     * 
     */
    public String locale() {
        return this.locale;
    }
    public Integer poolDepth() {
        return this.poolDepth;
    }
    /**
     * @return Defines whether or not IPv6 pool space is publicly advertisable over the internet.
     * 
     */
    public Boolean publiclyAdvertisable() {
        return this.publiclyAdvertisable;
    }
    /**
     * @return ID of the source IPAM pool.
     * 
     */
    public String sourceIpamPoolId() {
        return this.sourceIpamPoolId;
    }
    public String state() {
        return this.state;
    }
    /**
     * @return Map of tags to assigned to the resource.
     * 
     */
    public Map<String,String> tags() {
        return this.tags;
    }

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

    public static Builder builder(GetVpcIamPoolResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private String addressFamily;
        private Integer allocationDefaultNetmaskLength;
        private Integer allocationMaxNetmaskLength;
        private Integer allocationMinNetmaskLength;
        private Map<String,String> allocationResourceTags;
        private String arn;
        private Boolean autoImport;
        private String awsService;
        private String description;
        private @Nullable List<GetVpcIamPoolFilter> filters;
        private @Nullable String id;
        private @Nullable String ipamPoolId;
        private String ipamScopeId;
        private String ipamScopeType;
        private String locale;
        private Integer poolDepth;
        private Boolean publiclyAdvertisable;
        private String sourceIpamPoolId;
        private String state;
        private Map<String,String> tags;
        public Builder() {}
        public Builder(GetVpcIamPoolResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.addressFamily = defaults.addressFamily;
    	      this.allocationDefaultNetmaskLength = defaults.allocationDefaultNetmaskLength;
    	      this.allocationMaxNetmaskLength = defaults.allocationMaxNetmaskLength;
    	      this.allocationMinNetmaskLength = defaults.allocationMinNetmaskLength;
    	      this.allocationResourceTags = defaults.allocationResourceTags;
    	      this.arn = defaults.arn;
    	      this.autoImport = defaults.autoImport;
    	      this.awsService = defaults.awsService;
    	      this.description = defaults.description;
    	      this.filters = defaults.filters;
    	      this.id = defaults.id;
    	      this.ipamPoolId = defaults.ipamPoolId;
    	      this.ipamScopeId = defaults.ipamScopeId;
    	      this.ipamScopeType = defaults.ipamScopeType;
    	      this.locale = defaults.locale;
    	      this.poolDepth = defaults.poolDepth;
    	      this.publiclyAdvertisable = defaults.publiclyAdvertisable;
    	      this.sourceIpamPoolId = defaults.sourceIpamPoolId;
    	      this.state = defaults.state;
    	      this.tags = defaults.tags;
        }

        @CustomType.Setter
        public Builder addressFamily(String addressFamily) {
            this.addressFamily = Objects.requireNonNull(addressFamily);
            return this;
        }
        @CustomType.Setter
        public Builder allocationDefaultNetmaskLength(Integer allocationDefaultNetmaskLength) {
            this.allocationDefaultNetmaskLength = Objects.requireNonNull(allocationDefaultNetmaskLength);
            return this;
        }
        @CustomType.Setter
        public Builder allocationMaxNetmaskLength(Integer allocationMaxNetmaskLength) {
            this.allocationMaxNetmaskLength = Objects.requireNonNull(allocationMaxNetmaskLength);
            return this;
        }
        @CustomType.Setter
        public Builder allocationMinNetmaskLength(Integer allocationMinNetmaskLength) {
            this.allocationMinNetmaskLength = Objects.requireNonNull(allocationMinNetmaskLength);
            return this;
        }
        @CustomType.Setter
        public Builder allocationResourceTags(Map<String,String> allocationResourceTags) {
            this.allocationResourceTags = Objects.requireNonNull(allocationResourceTags);
            return this;
        }
        @CustomType.Setter
        public Builder arn(String arn) {
            this.arn = Objects.requireNonNull(arn);
            return this;
        }
        @CustomType.Setter
        public Builder autoImport(Boolean autoImport) {
            this.autoImport = Objects.requireNonNull(autoImport);
            return this;
        }
        @CustomType.Setter
        public Builder awsService(String awsService) {
            this.awsService = Objects.requireNonNull(awsService);
            return this;
        }
        @CustomType.Setter
        public Builder description(String description) {
            this.description = Objects.requireNonNull(description);
            return this;
        }
        @CustomType.Setter
        public Builder filters(@Nullable List<GetVpcIamPoolFilter> filters) {
            this.filters = filters;
            return this;
        }
        public Builder filters(GetVpcIamPoolFilter... filters) {
            return filters(List.of(filters));
        }
        @CustomType.Setter
        public Builder id(@Nullable String id) {
            this.id = id;
            return this;
        }
        @CustomType.Setter
        public Builder ipamPoolId(@Nullable String ipamPoolId) {
            this.ipamPoolId = ipamPoolId;
            return this;
        }
        @CustomType.Setter
        public Builder ipamScopeId(String ipamScopeId) {
            this.ipamScopeId = Objects.requireNonNull(ipamScopeId);
            return this;
        }
        @CustomType.Setter
        public Builder ipamScopeType(String ipamScopeType) {
            this.ipamScopeType = Objects.requireNonNull(ipamScopeType);
            return this;
        }
        @CustomType.Setter
        public Builder locale(String locale) {
            this.locale = Objects.requireNonNull(locale);
            return this;
        }
        @CustomType.Setter
        public Builder poolDepth(Integer poolDepth) {
            this.poolDepth = Objects.requireNonNull(poolDepth);
            return this;
        }
        @CustomType.Setter
        public Builder publiclyAdvertisable(Boolean publiclyAdvertisable) {
            this.publiclyAdvertisable = Objects.requireNonNull(publiclyAdvertisable);
            return this;
        }
        @CustomType.Setter
        public Builder sourceIpamPoolId(String sourceIpamPoolId) {
            this.sourceIpamPoolId = Objects.requireNonNull(sourceIpamPoolId);
            return this;
        }
        @CustomType.Setter
        public Builder state(String state) {
            this.state = Objects.requireNonNull(state);
            return this;
        }
        @CustomType.Setter
        public Builder tags(Map<String,String> tags) {
            this.tags = Objects.requireNonNull(tags);
            return this;
        }
        public GetVpcIamPoolResult build() {
            final var o = new GetVpcIamPoolResult();
            o.addressFamily = addressFamily;
            o.allocationDefaultNetmaskLength = allocationDefaultNetmaskLength;
            o.allocationMaxNetmaskLength = allocationMaxNetmaskLength;
            o.allocationMinNetmaskLength = allocationMinNetmaskLength;
            o.allocationResourceTags = allocationResourceTags;
            o.arn = arn;
            o.autoImport = autoImport;
            o.awsService = awsService;
            o.description = description;
            o.filters = filters;
            o.id = id;
            o.ipamPoolId = ipamPoolId;
            o.ipamScopeId = ipamScopeId;
            o.ipamScopeType = ipamScopeType;
            o.locale = locale;
            o.poolDepth = poolDepth;
            o.publiclyAdvertisable = publiclyAdvertisable;
            o.sourceIpamPoolId = sourceIpamPoolId;
            o.state = state;
            o.tags = tags;
            return o;
        }
    }
}
