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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class CertificateConfigSubjectConfigSubjectArgs extends com.pulumi.resources.ResourceArgs {

    public static final CertificateConfigSubjectConfigSubjectArgs Empty = new CertificateConfigSubjectConfigSubjectArgs();

    /**
     * The common name of the distinguished name.
     * 
     */
    @Import(name="commonName", required=true)
    private Output<String> commonName;

    /**
     * @return The common name of the distinguished name.
     * 
     */
    public Output<String> commonName() {
        return this.commonName;
    }

    /**
     * The country code of the subject.
     * 
     */
    @Import(name="countryCode")
    private @Nullable Output<String> countryCode;

    /**
     * @return The country code of the subject.
     * 
     */
    public Optional<Output<String>> countryCode() {
        return Optional.ofNullable(this.countryCode);
    }

    /**
     * The locality or city of the subject.
     * 
     */
    @Import(name="locality")
    private @Nullable Output<String> locality;

    /**
     * @return The locality or city of the subject.
     * 
     */
    public Optional<Output<String>> locality() {
        return Optional.ofNullable(this.locality);
    }

    /**
     * The organization of the subject.
     * 
     */
    @Import(name="organization", required=true)
    private Output<String> organization;

    /**
     * @return The organization of the subject.
     * 
     */
    public Output<String> organization() {
        return this.organization;
    }

    /**
     * The organizational unit of the subject.
     * 
     */
    @Import(name="organizationalUnit")
    private @Nullable Output<String> organizationalUnit;

    /**
     * @return The organizational unit of the subject.
     * 
     */
    public Optional<Output<String>> organizationalUnit() {
        return Optional.ofNullable(this.organizationalUnit);
    }

    /**
     * The postal code of the subject.
     * 
     */
    @Import(name="postalCode")
    private @Nullable Output<String> postalCode;

    /**
     * @return The postal code of the subject.
     * 
     */
    public Optional<Output<String>> postalCode() {
        return Optional.ofNullable(this.postalCode);
    }

    /**
     * The province, territory, or regional state of the subject.
     * 
     */
    @Import(name="province")
    private @Nullable Output<String> province;

    /**
     * @return The province, territory, or regional state of the subject.
     * 
     */
    public Optional<Output<String>> province() {
        return Optional.ofNullable(this.province);
    }

    /**
     * The street address of the subject.
     * 
     */
    @Import(name="streetAddress")
    private @Nullable Output<String> streetAddress;

    /**
     * @return The street address of the subject.
     * 
     */
    public Optional<Output<String>> streetAddress() {
        return Optional.ofNullable(this.streetAddress);
    }

    private CertificateConfigSubjectConfigSubjectArgs() {}

    private CertificateConfigSubjectConfigSubjectArgs(CertificateConfigSubjectConfigSubjectArgs $) {
        this.commonName = $.commonName;
        this.countryCode = $.countryCode;
        this.locality = $.locality;
        this.organization = $.organization;
        this.organizationalUnit = $.organizationalUnit;
        this.postalCode = $.postalCode;
        this.province = $.province;
        this.streetAddress = $.streetAddress;
    }

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

    public static final class Builder {
        private CertificateConfigSubjectConfigSubjectArgs $;

        public Builder() {
            $ = new CertificateConfigSubjectConfigSubjectArgs();
        }

        public Builder(CertificateConfigSubjectConfigSubjectArgs defaults) {
            $ = new CertificateConfigSubjectConfigSubjectArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param commonName The common name of the distinguished name.
         * 
         * @return builder
         * 
         */
        public Builder commonName(Output<String> commonName) {
            $.commonName = commonName;
            return this;
        }

        /**
         * @param commonName The common name of the distinguished name.
         * 
         * @return builder
         * 
         */
        public Builder commonName(String commonName) {
            return commonName(Output.of(commonName));
        }

        /**
         * @param countryCode The country code of the subject.
         * 
         * @return builder
         * 
         */
        public Builder countryCode(@Nullable Output<String> countryCode) {
            $.countryCode = countryCode;
            return this;
        }

        /**
         * @param countryCode The country code of the subject.
         * 
         * @return builder
         * 
         */
        public Builder countryCode(String countryCode) {
            return countryCode(Output.of(countryCode));
        }

        /**
         * @param locality The locality or city of the subject.
         * 
         * @return builder
         * 
         */
        public Builder locality(@Nullable Output<String> locality) {
            $.locality = locality;
            return this;
        }

        /**
         * @param locality The locality or city of the subject.
         * 
         * @return builder
         * 
         */
        public Builder locality(String locality) {
            return locality(Output.of(locality));
        }

        /**
         * @param organization The organization of the subject.
         * 
         * @return builder
         * 
         */
        public Builder organization(Output<String> organization) {
            $.organization = organization;
            return this;
        }

        /**
         * @param organization The organization of the subject.
         * 
         * @return builder
         * 
         */
        public Builder organization(String organization) {
            return organization(Output.of(organization));
        }

        /**
         * @param organizationalUnit The organizational unit of the subject.
         * 
         * @return builder
         * 
         */
        public Builder organizationalUnit(@Nullable Output<String> organizationalUnit) {
            $.organizationalUnit = organizationalUnit;
            return this;
        }

        /**
         * @param organizationalUnit The organizational unit of the subject.
         * 
         * @return builder
         * 
         */
        public Builder organizationalUnit(String organizationalUnit) {
            return organizationalUnit(Output.of(organizationalUnit));
        }

        /**
         * @param postalCode The postal code of the subject.
         * 
         * @return builder
         * 
         */
        public Builder postalCode(@Nullable Output<String> postalCode) {
            $.postalCode = postalCode;
            return this;
        }

        /**
         * @param postalCode The postal code of the subject.
         * 
         * @return builder
         * 
         */
        public Builder postalCode(String postalCode) {
            return postalCode(Output.of(postalCode));
        }

        /**
         * @param province The province, territory, or regional state of the subject.
         * 
         * @return builder
         * 
         */
        public Builder province(@Nullable Output<String> province) {
            $.province = province;
            return this;
        }

        /**
         * @param province The province, territory, or regional state of the subject.
         * 
         * @return builder
         * 
         */
        public Builder province(String province) {
            return province(Output.of(province));
        }

        /**
         * @param streetAddress The street address of the subject.
         * 
         * @return builder
         * 
         */
        public Builder streetAddress(@Nullable Output<String> streetAddress) {
            $.streetAddress = streetAddress;
            return this;
        }

        /**
         * @param streetAddress The street address of the subject.
         * 
         * @return builder
         * 
         */
        public Builder streetAddress(String streetAddress) {
            return streetAddress(Output.of(streetAddress));
        }

        public CertificateConfigSubjectConfigSubjectArgs build() {
            $.commonName = Objects.requireNonNull($.commonName, "expected parameter 'commonName' to be non-null");
            $.organization = Objects.requireNonNull($.organization, "expected parameter 'organization' to be non-null");
            return $;
        }
    }

}
