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

import com.pulumi.azure.batch.inputs.PoolMountAzureBlobFileSystemArgs;
import com.pulumi.azure.batch.inputs.PoolMountAzureFileShareArgs;
import com.pulumi.azure.batch.inputs.PoolMountCifsMountArgs;
import com.pulumi.azure.batch.inputs.PoolMountNfsMountArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final PoolMountArgs Empty = new PoolMountArgs();

    /**
     * A `azure_blob_file_system` block defined as below.
     * 
     */
    @Import(name="azureBlobFileSystem")
    private @Nullable Output<PoolMountAzureBlobFileSystemArgs> azureBlobFileSystem;

    /**
     * @return A `azure_blob_file_system` block defined as below.
     * 
     */
    public Optional<Output<PoolMountAzureBlobFileSystemArgs>> azureBlobFileSystem() {
        return Optional.ofNullable(this.azureBlobFileSystem);
    }

    /**
     * A `azure_file_share` block defined as below.
     * 
     */
    @Import(name="azureFileShares")
    private @Nullable Output<List<PoolMountAzureFileShareArgs>> azureFileShares;

    /**
     * @return A `azure_file_share` block defined as below.
     * 
     */
    public Optional<Output<List<PoolMountAzureFileShareArgs>>> azureFileShares() {
        return Optional.ofNullable(this.azureFileShares);
    }

    /**
     * A `cifs_mount` block defined as below.
     * 
     */
    @Import(name="cifsMounts")
    private @Nullable Output<List<PoolMountCifsMountArgs>> cifsMounts;

    /**
     * @return A `cifs_mount` block defined as below.
     * 
     */
    public Optional<Output<List<PoolMountCifsMountArgs>>> cifsMounts() {
        return Optional.ofNullable(this.cifsMounts);
    }

    /**
     * A `nfs_mount` block defined as below.
     * 
     */
    @Import(name="nfsMounts")
    private @Nullable Output<List<PoolMountNfsMountArgs>> nfsMounts;

    /**
     * @return A `nfs_mount` block defined as below.
     * 
     */
    public Optional<Output<List<PoolMountNfsMountArgs>>> nfsMounts() {
        return Optional.ofNullable(this.nfsMounts);
    }

    private PoolMountArgs() {}

    private PoolMountArgs(PoolMountArgs $) {
        this.azureBlobFileSystem = $.azureBlobFileSystem;
        this.azureFileShares = $.azureFileShares;
        this.cifsMounts = $.cifsMounts;
        this.nfsMounts = $.nfsMounts;
    }

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

    public static final class Builder {
        private PoolMountArgs $;

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

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

        /**
         * @param azureBlobFileSystem A `azure_blob_file_system` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder azureBlobFileSystem(@Nullable Output<PoolMountAzureBlobFileSystemArgs> azureBlobFileSystem) {
            $.azureBlobFileSystem = azureBlobFileSystem;
            return this;
        }

        /**
         * @param azureBlobFileSystem A `azure_blob_file_system` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder azureBlobFileSystem(PoolMountAzureBlobFileSystemArgs azureBlobFileSystem) {
            return azureBlobFileSystem(Output.of(azureBlobFileSystem));
        }

        /**
         * @param azureFileShares A `azure_file_share` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder azureFileShares(@Nullable Output<List<PoolMountAzureFileShareArgs>> azureFileShares) {
            $.azureFileShares = azureFileShares;
            return this;
        }

        /**
         * @param azureFileShares A `azure_file_share` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder azureFileShares(List<PoolMountAzureFileShareArgs> azureFileShares) {
            return azureFileShares(Output.of(azureFileShares));
        }

        /**
         * @param azureFileShares A `azure_file_share` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder azureFileShares(PoolMountAzureFileShareArgs... azureFileShares) {
            return azureFileShares(List.of(azureFileShares));
        }

        /**
         * @param cifsMounts A `cifs_mount` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder cifsMounts(@Nullable Output<List<PoolMountCifsMountArgs>> cifsMounts) {
            $.cifsMounts = cifsMounts;
            return this;
        }

        /**
         * @param cifsMounts A `cifs_mount` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder cifsMounts(List<PoolMountCifsMountArgs> cifsMounts) {
            return cifsMounts(Output.of(cifsMounts));
        }

        /**
         * @param cifsMounts A `cifs_mount` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder cifsMounts(PoolMountCifsMountArgs... cifsMounts) {
            return cifsMounts(List.of(cifsMounts));
        }

        /**
         * @param nfsMounts A `nfs_mount` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder nfsMounts(@Nullable Output<List<PoolMountNfsMountArgs>> nfsMounts) {
            $.nfsMounts = nfsMounts;
            return this;
        }

        /**
         * @param nfsMounts A `nfs_mount` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder nfsMounts(List<PoolMountNfsMountArgs> nfsMounts) {
            return nfsMounts(Output.of(nfsMounts));
        }

        /**
         * @param nfsMounts A `nfs_mount` block defined as below.
         * 
         * @return builder
         * 
         */
        public Builder nfsMounts(PoolMountNfsMountArgs... nfsMounts) {
            return nfsMounts(List.of(nfsMounts));
        }

        public PoolMountArgs build() {
            return $;
        }
    }

}
