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

import com.pulumi.core.annotations.CustomType;
import com.pulumi.gcp.databasemigrationservice.outputs.ConnectionProfileAlloydbSettingsInitialUser;
import com.pulumi.gcp.databasemigrationservice.outputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettings;
import java.lang.String;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class ConnectionProfileAlloydbSettings {
    /**
     * @return Required. Input only. Initial user to setup during cluster creation.
     * Structure is documented below.
     * 
     */
    private ConnectionProfileAlloydbSettingsInitialUser initialUser;
    /**
     * @return Labels for the AlloyDB cluster created by DMS.
     * 
     */
    private @Nullable Map<String,String> labels;
    /**
     * @return Settings for the cluster&#39;s primary instance
     * Structure is documented below.
     * 
     */
    private @Nullable ConnectionProfileAlloydbSettingsPrimaryInstanceSettings primaryInstanceSettings;
    /**
     * @return Required. The resource link for the VPC network in which cluster resources are created and from which they are accessible via Private IP. The network must belong to the same project as the cluster.
     * It is specified in the form: &#39;projects/{project_number}/global/networks/{network_id}&#39;. This is required to create a cluster.
     * 
     */
    private String vpcNetwork;

    private ConnectionProfileAlloydbSettings() {}
    /**
     * @return Required. Input only. Initial user to setup during cluster creation.
     * Structure is documented below.
     * 
     */
    public ConnectionProfileAlloydbSettingsInitialUser initialUser() {
        return this.initialUser;
    }
    /**
     * @return Labels for the AlloyDB cluster created by DMS.
     * 
     */
    public Map<String,String> labels() {
        return this.labels == null ? Map.of() : this.labels;
    }
    /**
     * @return Settings for the cluster&#39;s primary instance
     * Structure is documented below.
     * 
     */
    public Optional<ConnectionProfileAlloydbSettingsPrimaryInstanceSettings> primaryInstanceSettings() {
        return Optional.ofNullable(this.primaryInstanceSettings);
    }
    /**
     * @return Required. The resource link for the VPC network in which cluster resources are created and from which they are accessible via Private IP. The network must belong to the same project as the cluster.
     * It is specified in the form: &#39;projects/{project_number}/global/networks/{network_id}&#39;. This is required to create a cluster.
     * 
     */
    public String vpcNetwork() {
        return this.vpcNetwork;
    }

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

    public static Builder builder(ConnectionProfileAlloydbSettings defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private ConnectionProfileAlloydbSettingsInitialUser initialUser;
        private @Nullable Map<String,String> labels;
        private @Nullable ConnectionProfileAlloydbSettingsPrimaryInstanceSettings primaryInstanceSettings;
        private String vpcNetwork;
        public Builder() {}
        public Builder(ConnectionProfileAlloydbSettings defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.initialUser = defaults.initialUser;
    	      this.labels = defaults.labels;
    	      this.primaryInstanceSettings = defaults.primaryInstanceSettings;
    	      this.vpcNetwork = defaults.vpcNetwork;
        }

        @CustomType.Setter
        public Builder initialUser(ConnectionProfileAlloydbSettingsInitialUser initialUser) {
            this.initialUser = Objects.requireNonNull(initialUser);
            return this;
        }
        @CustomType.Setter
        public Builder labels(@Nullable Map<String,String> labels) {
            this.labels = labels;
            return this;
        }
        @CustomType.Setter
        public Builder primaryInstanceSettings(@Nullable ConnectionProfileAlloydbSettingsPrimaryInstanceSettings primaryInstanceSettings) {
            this.primaryInstanceSettings = primaryInstanceSettings;
            return this;
        }
        @CustomType.Setter
        public Builder vpcNetwork(String vpcNetwork) {
            this.vpcNetwork = Objects.requireNonNull(vpcNetwork);
            return this;
        }
        public ConnectionProfileAlloydbSettings build() {
            final var o = new ConnectionProfileAlloydbSettings();
            o.initialUser = initialUser;
            o.labels = labels;
            o.primaryInstanceSettings = primaryInstanceSettings;
            o.vpcNetwork = vpcNetwork;
            return o;
        }
    }
}
