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

import com.pulumi.azure.redis.outputs.GetCachePatchSchedule;
import com.pulumi.azure.redis.outputs.GetCacheRedisConfiguration;
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;

@CustomType
public final class GetCacheResult {
    /**
     * @return The size of the Redis Cache deployed.
     * 
     */
    private Integer capacity;
    /**
     * @return Whether the SSL port is enabled.
     * 
     */
    private Boolean enableNonSslPort;
    /**
     * @return The SKU family/pricing group used. Possible values are `C` (for Basic/Standard SKU family) and `P` (for `Premium`)
     * 
     */
    private String family;
    /**
     * @return The Hostname of the Redis Instance
     * 
     */
    private String hostname;
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    private String id;
    /**
     * @return The location of the Redis Cache.
     * 
     */
    private String location;
    /**
     * @return The minimum TLS version.
     * 
     */
    private String minimumTlsVersion;
    private String name;
    /**
     * @return A list of `patch_schedule` blocks as defined below.
     * 
     */
    private List<GetCachePatchSchedule> patchSchedules;
    /**
     * @return The non-SSL Port of the Redis Instance
     * 
     */
    private Integer port;
    /**
     * @return The Primary Access Key for the Redis Instance
     * 
     */
    private String primaryAccessKey;
    /**
     * @return The primary connection string of the Redis Instance.
     * 
     */
    private String primaryConnectionString;
    /**
     * @return The Static IP Address assigned to the Redis Cache when hosted inside the Virtual Network.
     * 
     */
    private String privateStaticIpAddress;
    /**
     * @return A `redis_configuration` block as defined below.
     * 
     */
    private List<GetCacheRedisConfiguration> redisConfigurations;
    private String resourceGroupName;
    /**
     * @return The Secondary Access Key for the Redis Instance
     * 
     */
    private String secondaryAccessKey;
    /**
     * @return The secondary connection string of the Redis Instance.
     * 
     */
    private String secondaryConnectionString;
    private Integer shardCount;
    /**
     * @return The SKU of Redis used. Possible values are `Basic`, `Standard` and `Premium`.
     * 
     */
    private String skuName;
    /**
     * @return The SSL Port of the Redis Instance
     * 
     */
    private Integer sslPort;
    private String subnetId;
    private Map<String,String> tags;
    /**
     * @return A list of Availability Zones in which this Redis Cache is located.
     * 
     */
    private List<String> zones;

    private GetCacheResult() {}
    /**
     * @return The size of the Redis Cache deployed.
     * 
     */
    public Integer capacity() {
        return this.capacity;
    }
    /**
     * @return Whether the SSL port is enabled.
     * 
     */
    public Boolean enableNonSslPort() {
        return this.enableNonSslPort;
    }
    /**
     * @return The SKU family/pricing group used. Possible values are `C` (for Basic/Standard SKU family) and `P` (for `Premium`)
     * 
     */
    public String family() {
        return this.family;
    }
    /**
     * @return The Hostname of the Redis Instance
     * 
     */
    public String hostname() {
        return this.hostname;
    }
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    public String id() {
        return this.id;
    }
    /**
     * @return The location of the Redis Cache.
     * 
     */
    public String location() {
        return this.location;
    }
    /**
     * @return The minimum TLS version.
     * 
     */
    public String minimumTlsVersion() {
        return this.minimumTlsVersion;
    }
    public String name() {
        return this.name;
    }
    /**
     * @return A list of `patch_schedule` blocks as defined below.
     * 
     */
    public List<GetCachePatchSchedule> patchSchedules() {
        return this.patchSchedules;
    }
    /**
     * @return The non-SSL Port of the Redis Instance
     * 
     */
    public Integer port() {
        return this.port;
    }
    /**
     * @return The Primary Access Key for the Redis Instance
     * 
     */
    public String primaryAccessKey() {
        return this.primaryAccessKey;
    }
    /**
     * @return The primary connection string of the Redis Instance.
     * 
     */
    public String primaryConnectionString() {
        return this.primaryConnectionString;
    }
    /**
     * @return The Static IP Address assigned to the Redis Cache when hosted inside the Virtual Network.
     * 
     */
    public String privateStaticIpAddress() {
        return this.privateStaticIpAddress;
    }
    /**
     * @return A `redis_configuration` block as defined below.
     * 
     */
    public List<GetCacheRedisConfiguration> redisConfigurations() {
        return this.redisConfigurations;
    }
    public String resourceGroupName() {
        return this.resourceGroupName;
    }
    /**
     * @return The Secondary Access Key for the Redis Instance
     * 
     */
    public String secondaryAccessKey() {
        return this.secondaryAccessKey;
    }
    /**
     * @return The secondary connection string of the Redis Instance.
     * 
     */
    public String secondaryConnectionString() {
        return this.secondaryConnectionString;
    }
    public Integer shardCount() {
        return this.shardCount;
    }
    /**
     * @return The SKU of Redis used. Possible values are `Basic`, `Standard` and `Premium`.
     * 
     */
    public String skuName() {
        return this.skuName;
    }
    /**
     * @return The SSL Port of the Redis Instance
     * 
     */
    public Integer sslPort() {
        return this.sslPort;
    }
    public String subnetId() {
        return this.subnetId;
    }
    public Map<String,String> tags() {
        return this.tags;
    }
    /**
     * @return A list of Availability Zones in which this Redis Cache is located.
     * 
     */
    public List<String> zones() {
        return this.zones;
    }

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

    public static Builder builder(GetCacheResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private Integer capacity;
        private Boolean enableNonSslPort;
        private String family;
        private String hostname;
        private String id;
        private String location;
        private String minimumTlsVersion;
        private String name;
        private List<GetCachePatchSchedule> patchSchedules;
        private Integer port;
        private String primaryAccessKey;
        private String primaryConnectionString;
        private String privateStaticIpAddress;
        private List<GetCacheRedisConfiguration> redisConfigurations;
        private String resourceGroupName;
        private String secondaryAccessKey;
        private String secondaryConnectionString;
        private Integer shardCount;
        private String skuName;
        private Integer sslPort;
        private String subnetId;
        private Map<String,String> tags;
        private List<String> zones;
        public Builder() {}
        public Builder(GetCacheResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.capacity = defaults.capacity;
    	      this.enableNonSslPort = defaults.enableNonSslPort;
    	      this.family = defaults.family;
    	      this.hostname = defaults.hostname;
    	      this.id = defaults.id;
    	      this.location = defaults.location;
    	      this.minimumTlsVersion = defaults.minimumTlsVersion;
    	      this.name = defaults.name;
    	      this.patchSchedules = defaults.patchSchedules;
    	      this.port = defaults.port;
    	      this.primaryAccessKey = defaults.primaryAccessKey;
    	      this.primaryConnectionString = defaults.primaryConnectionString;
    	      this.privateStaticIpAddress = defaults.privateStaticIpAddress;
    	      this.redisConfigurations = defaults.redisConfigurations;
    	      this.resourceGroupName = defaults.resourceGroupName;
    	      this.secondaryAccessKey = defaults.secondaryAccessKey;
    	      this.secondaryConnectionString = defaults.secondaryConnectionString;
    	      this.shardCount = defaults.shardCount;
    	      this.skuName = defaults.skuName;
    	      this.sslPort = defaults.sslPort;
    	      this.subnetId = defaults.subnetId;
    	      this.tags = defaults.tags;
    	      this.zones = defaults.zones;
        }

        @CustomType.Setter
        public Builder capacity(Integer capacity) {
            this.capacity = Objects.requireNonNull(capacity);
            return this;
        }
        @CustomType.Setter
        public Builder enableNonSslPort(Boolean enableNonSslPort) {
            this.enableNonSslPort = Objects.requireNonNull(enableNonSslPort);
            return this;
        }
        @CustomType.Setter
        public Builder family(String family) {
            this.family = Objects.requireNonNull(family);
            return this;
        }
        @CustomType.Setter
        public Builder hostname(String hostname) {
            this.hostname = Objects.requireNonNull(hostname);
            return this;
        }
        @CustomType.Setter
        public Builder id(String id) {
            this.id = Objects.requireNonNull(id);
            return this;
        }
        @CustomType.Setter
        public Builder location(String location) {
            this.location = Objects.requireNonNull(location);
            return this;
        }
        @CustomType.Setter
        public Builder minimumTlsVersion(String minimumTlsVersion) {
            this.minimumTlsVersion = Objects.requireNonNull(minimumTlsVersion);
            return this;
        }
        @CustomType.Setter
        public Builder name(String name) {
            this.name = Objects.requireNonNull(name);
            return this;
        }
        @CustomType.Setter
        public Builder patchSchedules(List<GetCachePatchSchedule> patchSchedules) {
            this.patchSchedules = Objects.requireNonNull(patchSchedules);
            return this;
        }
        public Builder patchSchedules(GetCachePatchSchedule... patchSchedules) {
            return patchSchedules(List.of(patchSchedules));
        }
        @CustomType.Setter
        public Builder port(Integer port) {
            this.port = Objects.requireNonNull(port);
            return this;
        }
        @CustomType.Setter
        public Builder primaryAccessKey(String primaryAccessKey) {
            this.primaryAccessKey = Objects.requireNonNull(primaryAccessKey);
            return this;
        }
        @CustomType.Setter
        public Builder primaryConnectionString(String primaryConnectionString) {
            this.primaryConnectionString = Objects.requireNonNull(primaryConnectionString);
            return this;
        }
        @CustomType.Setter
        public Builder privateStaticIpAddress(String privateStaticIpAddress) {
            this.privateStaticIpAddress = Objects.requireNonNull(privateStaticIpAddress);
            return this;
        }
        @CustomType.Setter
        public Builder redisConfigurations(List<GetCacheRedisConfiguration> redisConfigurations) {
            this.redisConfigurations = Objects.requireNonNull(redisConfigurations);
            return this;
        }
        public Builder redisConfigurations(GetCacheRedisConfiguration... redisConfigurations) {
            return redisConfigurations(List.of(redisConfigurations));
        }
        @CustomType.Setter
        public Builder resourceGroupName(String resourceGroupName) {
            this.resourceGroupName = Objects.requireNonNull(resourceGroupName);
            return this;
        }
        @CustomType.Setter
        public Builder secondaryAccessKey(String secondaryAccessKey) {
            this.secondaryAccessKey = Objects.requireNonNull(secondaryAccessKey);
            return this;
        }
        @CustomType.Setter
        public Builder secondaryConnectionString(String secondaryConnectionString) {
            this.secondaryConnectionString = Objects.requireNonNull(secondaryConnectionString);
            return this;
        }
        @CustomType.Setter
        public Builder shardCount(Integer shardCount) {
            this.shardCount = Objects.requireNonNull(shardCount);
            return this;
        }
        @CustomType.Setter
        public Builder skuName(String skuName) {
            this.skuName = Objects.requireNonNull(skuName);
            return this;
        }
        @CustomType.Setter
        public Builder sslPort(Integer sslPort) {
            this.sslPort = Objects.requireNonNull(sslPort);
            return this;
        }
        @CustomType.Setter
        public Builder subnetId(String subnetId) {
            this.subnetId = Objects.requireNonNull(subnetId);
            return this;
        }
        @CustomType.Setter
        public Builder tags(Map<String,String> tags) {
            this.tags = Objects.requireNonNull(tags);
            return this;
        }
        @CustomType.Setter
        public Builder zones(List<String> zones) {
            this.zones = Objects.requireNonNull(zones);
            return this;
        }
        public Builder zones(String... zones) {
            return zones(List.of(zones));
        }
        public GetCacheResult build() {
            final var o = new GetCacheResult();
            o.capacity = capacity;
            o.enableNonSslPort = enableNonSslPort;
            o.family = family;
            o.hostname = hostname;
            o.id = id;
            o.location = location;
            o.minimumTlsVersion = minimumTlsVersion;
            o.name = name;
            o.patchSchedules = patchSchedules;
            o.port = port;
            o.primaryAccessKey = primaryAccessKey;
            o.primaryConnectionString = primaryConnectionString;
            o.privateStaticIpAddress = privateStaticIpAddress;
            o.redisConfigurations = redisConfigurations;
            o.resourceGroupName = resourceGroupName;
            o.secondaryAccessKey = secondaryAccessKey;
            o.secondaryConnectionString = secondaryConnectionString;
            o.shardCount = shardCount;
            o.skuName = skuName;
            o.sslPort = sslPort;
            o.subnetId = subnetId;
            o.tags = tags;
            o.zones = zones;
            return o;
        }
    }
}
