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

import com.pulumi.aws.dms.outputs.GetEndpointElasticsearchSetting;
import com.pulumi.aws.dms.outputs.GetEndpointKafkaSetting;
import com.pulumi.aws.dms.outputs.GetEndpointKinesisSetting;
import com.pulumi.aws.dms.outputs.GetEndpointMongodbSetting;
import com.pulumi.aws.dms.outputs.GetEndpointRedisSetting;
import com.pulumi.aws.dms.outputs.GetEndpointRedshiftSetting;
import com.pulumi.aws.dms.outputs.GetEndpointS3Setting;
import com.pulumi.core.annotations.CustomType;
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 GetEndpointResult {
    private String certificateArn;
    private String databaseName;
    private @Nullable List<GetEndpointElasticsearchSetting> elasticsearchSettings;
    private String endpointArn;
    private String endpointId;
    private String endpointType;
    private String engineName;
    private @Nullable String extraConnectionAttributes;
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    private String id;
    private @Nullable List<GetEndpointKafkaSetting> kafkaSettings;
    private List<GetEndpointKinesisSetting> kinesisSettings;
    private String kmsKeyArn;
    private @Nullable List<GetEndpointMongodbSetting> mongodbSettings;
    private String password;
    private Integer port;
    private List<GetEndpointRedisSetting> redisSettings;
    private List<GetEndpointRedshiftSetting> redshiftSettings;
    private List<GetEndpointS3Setting> s3Settings;
    private String secretsManagerAccessRoleArn;
    private String secretsManagerArn;
    private String serverName;
    private String serviceAccessRole;
    private String sslMode;
    private Map<String,String> tags;
    private String username;

    private GetEndpointResult() {}
    public String certificateArn() {
        return this.certificateArn;
    }
    public String databaseName() {
        return this.databaseName;
    }
    public List<GetEndpointElasticsearchSetting> elasticsearchSettings() {
        return this.elasticsearchSettings == null ? List.of() : this.elasticsearchSettings;
    }
    public String endpointArn() {
        return this.endpointArn;
    }
    public String endpointId() {
        return this.endpointId;
    }
    public String endpointType() {
        return this.endpointType;
    }
    public String engineName() {
        return this.engineName;
    }
    public Optional<String> extraConnectionAttributes() {
        return Optional.ofNullable(this.extraConnectionAttributes);
    }
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    public String id() {
        return this.id;
    }
    public List<GetEndpointKafkaSetting> kafkaSettings() {
        return this.kafkaSettings == null ? List.of() : this.kafkaSettings;
    }
    public List<GetEndpointKinesisSetting> kinesisSettings() {
        return this.kinesisSettings;
    }
    public String kmsKeyArn() {
        return this.kmsKeyArn;
    }
    public List<GetEndpointMongodbSetting> mongodbSettings() {
        return this.mongodbSettings == null ? List.of() : this.mongodbSettings;
    }
    public String password() {
        return this.password;
    }
    public Integer port() {
        return this.port;
    }
    public List<GetEndpointRedisSetting> redisSettings() {
        return this.redisSettings;
    }
    public List<GetEndpointRedshiftSetting> redshiftSettings() {
        return this.redshiftSettings;
    }
    public List<GetEndpointS3Setting> s3Settings() {
        return this.s3Settings;
    }
    public String secretsManagerAccessRoleArn() {
        return this.secretsManagerAccessRoleArn;
    }
    public String secretsManagerArn() {
        return this.secretsManagerArn;
    }
    public String serverName() {
        return this.serverName;
    }
    public String serviceAccessRole() {
        return this.serviceAccessRole;
    }
    public String sslMode() {
        return this.sslMode;
    }
    public Map<String,String> tags() {
        return this.tags;
    }
    public String username() {
        return this.username;
    }

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

    public static Builder builder(GetEndpointResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private String certificateArn;
        private String databaseName;
        private @Nullable List<GetEndpointElasticsearchSetting> elasticsearchSettings;
        private String endpointArn;
        private String endpointId;
        private String endpointType;
        private String engineName;
        private @Nullable String extraConnectionAttributes;
        private String id;
        private @Nullable List<GetEndpointKafkaSetting> kafkaSettings;
        private List<GetEndpointKinesisSetting> kinesisSettings;
        private String kmsKeyArn;
        private @Nullable List<GetEndpointMongodbSetting> mongodbSettings;
        private String password;
        private Integer port;
        private List<GetEndpointRedisSetting> redisSettings;
        private List<GetEndpointRedshiftSetting> redshiftSettings;
        private List<GetEndpointS3Setting> s3Settings;
        private String secretsManagerAccessRoleArn;
        private String secretsManagerArn;
        private String serverName;
        private String serviceAccessRole;
        private String sslMode;
        private Map<String,String> tags;
        private String username;
        public Builder() {}
        public Builder(GetEndpointResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.certificateArn = defaults.certificateArn;
    	      this.databaseName = defaults.databaseName;
    	      this.elasticsearchSettings = defaults.elasticsearchSettings;
    	      this.endpointArn = defaults.endpointArn;
    	      this.endpointId = defaults.endpointId;
    	      this.endpointType = defaults.endpointType;
    	      this.engineName = defaults.engineName;
    	      this.extraConnectionAttributes = defaults.extraConnectionAttributes;
    	      this.id = defaults.id;
    	      this.kafkaSettings = defaults.kafkaSettings;
    	      this.kinesisSettings = defaults.kinesisSettings;
    	      this.kmsKeyArn = defaults.kmsKeyArn;
    	      this.mongodbSettings = defaults.mongodbSettings;
    	      this.password = defaults.password;
    	      this.port = defaults.port;
    	      this.redisSettings = defaults.redisSettings;
    	      this.redshiftSettings = defaults.redshiftSettings;
    	      this.s3Settings = defaults.s3Settings;
    	      this.secretsManagerAccessRoleArn = defaults.secretsManagerAccessRoleArn;
    	      this.secretsManagerArn = defaults.secretsManagerArn;
    	      this.serverName = defaults.serverName;
    	      this.serviceAccessRole = defaults.serviceAccessRole;
    	      this.sslMode = defaults.sslMode;
    	      this.tags = defaults.tags;
    	      this.username = defaults.username;
        }

        @CustomType.Setter
        public Builder certificateArn(String certificateArn) {
            this.certificateArn = Objects.requireNonNull(certificateArn);
            return this;
        }
        @CustomType.Setter
        public Builder databaseName(String databaseName) {
            this.databaseName = Objects.requireNonNull(databaseName);
            return this;
        }
        @CustomType.Setter
        public Builder elasticsearchSettings(@Nullable List<GetEndpointElasticsearchSetting> elasticsearchSettings) {
            this.elasticsearchSettings = elasticsearchSettings;
            return this;
        }
        public Builder elasticsearchSettings(GetEndpointElasticsearchSetting... elasticsearchSettings) {
            return elasticsearchSettings(List.of(elasticsearchSettings));
        }
        @CustomType.Setter
        public Builder endpointArn(String endpointArn) {
            this.endpointArn = Objects.requireNonNull(endpointArn);
            return this;
        }
        @CustomType.Setter
        public Builder endpointId(String endpointId) {
            this.endpointId = Objects.requireNonNull(endpointId);
            return this;
        }
        @CustomType.Setter
        public Builder endpointType(String endpointType) {
            this.endpointType = Objects.requireNonNull(endpointType);
            return this;
        }
        @CustomType.Setter
        public Builder engineName(String engineName) {
            this.engineName = Objects.requireNonNull(engineName);
            return this;
        }
        @CustomType.Setter
        public Builder extraConnectionAttributes(@Nullable String extraConnectionAttributes) {
            this.extraConnectionAttributes = extraConnectionAttributes;
            return this;
        }
        @CustomType.Setter
        public Builder id(String id) {
            this.id = Objects.requireNonNull(id);
            return this;
        }
        @CustomType.Setter
        public Builder kafkaSettings(@Nullable List<GetEndpointKafkaSetting> kafkaSettings) {
            this.kafkaSettings = kafkaSettings;
            return this;
        }
        public Builder kafkaSettings(GetEndpointKafkaSetting... kafkaSettings) {
            return kafkaSettings(List.of(kafkaSettings));
        }
        @CustomType.Setter
        public Builder kinesisSettings(List<GetEndpointKinesisSetting> kinesisSettings) {
            this.kinesisSettings = Objects.requireNonNull(kinesisSettings);
            return this;
        }
        public Builder kinesisSettings(GetEndpointKinesisSetting... kinesisSettings) {
            return kinesisSettings(List.of(kinesisSettings));
        }
        @CustomType.Setter
        public Builder kmsKeyArn(String kmsKeyArn) {
            this.kmsKeyArn = Objects.requireNonNull(kmsKeyArn);
            return this;
        }
        @CustomType.Setter
        public Builder mongodbSettings(@Nullable List<GetEndpointMongodbSetting> mongodbSettings) {
            this.mongodbSettings = mongodbSettings;
            return this;
        }
        public Builder mongodbSettings(GetEndpointMongodbSetting... mongodbSettings) {
            return mongodbSettings(List.of(mongodbSettings));
        }
        @CustomType.Setter
        public Builder password(String password) {
            this.password = Objects.requireNonNull(password);
            return this;
        }
        @CustomType.Setter
        public Builder port(Integer port) {
            this.port = Objects.requireNonNull(port);
            return this;
        }
        @CustomType.Setter
        public Builder redisSettings(List<GetEndpointRedisSetting> redisSettings) {
            this.redisSettings = Objects.requireNonNull(redisSettings);
            return this;
        }
        public Builder redisSettings(GetEndpointRedisSetting... redisSettings) {
            return redisSettings(List.of(redisSettings));
        }
        @CustomType.Setter
        public Builder redshiftSettings(List<GetEndpointRedshiftSetting> redshiftSettings) {
            this.redshiftSettings = Objects.requireNonNull(redshiftSettings);
            return this;
        }
        public Builder redshiftSettings(GetEndpointRedshiftSetting... redshiftSettings) {
            return redshiftSettings(List.of(redshiftSettings));
        }
        @CustomType.Setter
        public Builder s3Settings(List<GetEndpointS3Setting> s3Settings) {
            this.s3Settings = Objects.requireNonNull(s3Settings);
            return this;
        }
        public Builder s3Settings(GetEndpointS3Setting... s3Settings) {
            return s3Settings(List.of(s3Settings));
        }
        @CustomType.Setter
        public Builder secretsManagerAccessRoleArn(String secretsManagerAccessRoleArn) {
            this.secretsManagerAccessRoleArn = Objects.requireNonNull(secretsManagerAccessRoleArn);
            return this;
        }
        @CustomType.Setter
        public Builder secretsManagerArn(String secretsManagerArn) {
            this.secretsManagerArn = Objects.requireNonNull(secretsManagerArn);
            return this;
        }
        @CustomType.Setter
        public Builder serverName(String serverName) {
            this.serverName = Objects.requireNonNull(serverName);
            return this;
        }
        @CustomType.Setter
        public Builder serviceAccessRole(String serviceAccessRole) {
            this.serviceAccessRole = Objects.requireNonNull(serviceAccessRole);
            return this;
        }
        @CustomType.Setter
        public Builder sslMode(String sslMode) {
            this.sslMode = Objects.requireNonNull(sslMode);
            return this;
        }
        @CustomType.Setter
        public Builder tags(Map<String,String> tags) {
            this.tags = Objects.requireNonNull(tags);
            return this;
        }
        @CustomType.Setter
        public Builder username(String username) {
            this.username = Objects.requireNonNull(username);
            return this;
        }
        public GetEndpointResult build() {
            final var o = new GetEndpointResult();
            o.certificateArn = certificateArn;
            o.databaseName = databaseName;
            o.elasticsearchSettings = elasticsearchSettings;
            o.endpointArn = endpointArn;
            o.endpointId = endpointId;
            o.endpointType = endpointType;
            o.engineName = engineName;
            o.extraConnectionAttributes = extraConnectionAttributes;
            o.id = id;
            o.kafkaSettings = kafkaSettings;
            o.kinesisSettings = kinesisSettings;
            o.kmsKeyArn = kmsKeyArn;
            o.mongodbSettings = mongodbSettings;
            o.password = password;
            o.port = port;
            o.redisSettings = redisSettings;
            o.redshiftSettings = redshiftSettings;
            o.s3Settings = s3Settings;
            o.secretsManagerAccessRoleArn = secretsManagerAccessRoleArn;
            o.secretsManagerArn = secretsManagerArn;
            o.serverName = serverName;
            o.serviceAccessRole = serviceAccessRole;
            o.sslMode = sslMode;
            o.tags = tags;
            o.username = username;
            return o;
        }
    }
}
