// *** 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.kubernetes.core.v1.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.kubernetes.core.v1.inputs.ConfigMapProjectionPatchArgs;
import com.pulumi.kubernetes.core.v1.inputs.DownwardAPIProjectionPatchArgs;
import com.pulumi.kubernetes.core.v1.inputs.SecretProjectionPatchArgs;
import com.pulumi.kubernetes.core.v1.inputs.ServiceAccountTokenProjectionPatchArgs;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


/**
 * Projection that may be projected along with other supported volume types
 * 
 */
public final class VolumeProjectionPatchArgs extends com.pulumi.resources.ResourceArgs {

    public static final VolumeProjectionPatchArgs Empty = new VolumeProjectionPatchArgs();

    /**
     * configMap information about the configMap data to project
     * 
     */
    @Import(name="configMap")
    private @Nullable Output<ConfigMapProjectionPatchArgs> configMap;

    /**
     * @return configMap information about the configMap data to project
     * 
     */
    public Optional<Output<ConfigMapProjectionPatchArgs>> configMap() {
        return Optional.ofNullable(this.configMap);
    }

    /**
     * downwardAPI information about the downwardAPI data to project
     * 
     */
    @Import(name="downwardAPI")
    private @Nullable Output<DownwardAPIProjectionPatchArgs> downwardAPI;

    /**
     * @return downwardAPI information about the downwardAPI data to project
     * 
     */
    public Optional<Output<DownwardAPIProjectionPatchArgs>> downwardAPI() {
        return Optional.ofNullable(this.downwardAPI);
    }

    /**
     * secret information about the secret data to project
     * 
     */
    @Import(name="secret")
    private @Nullable Output<SecretProjectionPatchArgs> secret;

    /**
     * @return secret information about the secret data to project
     * 
     */
    public Optional<Output<SecretProjectionPatchArgs>> secret() {
        return Optional.ofNullable(this.secret);
    }

    /**
     * serviceAccountToken is information about the serviceAccountToken data to project
     * 
     */
    @Import(name="serviceAccountToken")
    private @Nullable Output<ServiceAccountTokenProjectionPatchArgs> serviceAccountToken;

    /**
     * @return serviceAccountToken is information about the serviceAccountToken data to project
     * 
     */
    public Optional<Output<ServiceAccountTokenProjectionPatchArgs>> serviceAccountToken() {
        return Optional.ofNullable(this.serviceAccountToken);
    }

    private VolumeProjectionPatchArgs() {}

    private VolumeProjectionPatchArgs(VolumeProjectionPatchArgs $) {
        this.configMap = $.configMap;
        this.downwardAPI = $.downwardAPI;
        this.secret = $.secret;
        this.serviceAccountToken = $.serviceAccountToken;
    }

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

    public static final class Builder {
        private VolumeProjectionPatchArgs $;

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

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

        /**
         * @param configMap configMap information about the configMap data to project
         * 
         * @return builder
         * 
         */
        public Builder configMap(@Nullable Output<ConfigMapProjectionPatchArgs> configMap) {
            $.configMap = configMap;
            return this;
        }

        /**
         * @param configMap configMap information about the configMap data to project
         * 
         * @return builder
         * 
         */
        public Builder configMap(ConfigMapProjectionPatchArgs configMap) {
            return configMap(Output.of(configMap));
        }

        /**
         * @param downwardAPI downwardAPI information about the downwardAPI data to project
         * 
         * @return builder
         * 
         */
        public Builder downwardAPI(@Nullable Output<DownwardAPIProjectionPatchArgs> downwardAPI) {
            $.downwardAPI = downwardAPI;
            return this;
        }

        /**
         * @param downwardAPI downwardAPI information about the downwardAPI data to project
         * 
         * @return builder
         * 
         */
        public Builder downwardAPI(DownwardAPIProjectionPatchArgs downwardAPI) {
            return downwardAPI(Output.of(downwardAPI));
        }

        /**
         * @param secret secret information about the secret data to project
         * 
         * @return builder
         * 
         */
        public Builder secret(@Nullable Output<SecretProjectionPatchArgs> secret) {
            $.secret = secret;
            return this;
        }

        /**
         * @param secret secret information about the secret data to project
         * 
         * @return builder
         * 
         */
        public Builder secret(SecretProjectionPatchArgs secret) {
            return secret(Output.of(secret));
        }

        /**
         * @param serviceAccountToken serviceAccountToken is information about the serviceAccountToken data to project
         * 
         * @return builder
         * 
         */
        public Builder serviceAccountToken(@Nullable Output<ServiceAccountTokenProjectionPatchArgs> serviceAccountToken) {
            $.serviceAccountToken = serviceAccountToken;
            return this;
        }

        /**
         * @param serviceAccountToken serviceAccountToken is information about the serviceAccountToken data to project
         * 
         * @return builder
         * 
         */
        public Builder serviceAccountToken(ServiceAccountTokenProjectionPatchArgs serviceAccountToken) {
            return serviceAccountToken(Output.of(serviceAccountToken));
        }

        public VolumeProjectionPatchArgs build() {
            return $;
        }
    }

}
