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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.filestore.inputs.InstanceFileSharesNfsExportOptionArgs;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final InstanceFileSharesArgs Empty = new InstanceFileSharesArgs();

    /**
     * File share capacity in GiB. This must be at least 1024 GiB
     * for the standard tier, or 2560 GiB for the premium tier.
     * 
     */
    @Import(name="capacityGb", required=true)
    private Output<Integer> capacityGb;

    /**
     * @return File share capacity in GiB. This must be at least 1024 GiB
     * for the standard tier, or 2560 GiB for the premium tier.
     * 
     */
    public Output<Integer> capacityGb() {
        return this.capacityGb;
    }

    /**
     * The name of the fileshare (16 characters or less)
     * 
     */
    @Import(name="name", required=true)
    private Output<String> name;

    /**
     * @return The name of the fileshare (16 characters or less)
     * 
     */
    public Output<String> name() {
        return this.name;
    }

    /**
     * Nfs Export Options. There is a limit of 10 export options per file share.
     * Structure is documented below.
     * 
     */
    @Import(name="nfsExportOptions")
    private @Nullable Output<List<InstanceFileSharesNfsExportOptionArgs>> nfsExportOptions;

    /**
     * @return Nfs Export Options. There is a limit of 10 export options per file share.
     * Structure is documented below.
     * 
     */
    public Optional<Output<List<InstanceFileSharesNfsExportOptionArgs>>> nfsExportOptions() {
        return Optional.ofNullable(this.nfsExportOptions);
    }

    /**
     * (Output)
     * The resource name of the backup, in the format
     * projects/{projectId}/locations/{locationId}/backups/{backupId},
     * that this file share has been restored from.
     * 
     */
    @Import(name="sourceBackup")
    private @Nullable Output<String> sourceBackup;

    /**
     * @return (Output)
     * The resource name of the backup, in the format
     * projects/{projectId}/locations/{locationId}/backups/{backupId},
     * that this file share has been restored from.
     * 
     */
    public Optional<Output<String>> sourceBackup() {
        return Optional.ofNullable(this.sourceBackup);
    }

    private InstanceFileSharesArgs() {}

    private InstanceFileSharesArgs(InstanceFileSharesArgs $) {
        this.capacityGb = $.capacityGb;
        this.name = $.name;
        this.nfsExportOptions = $.nfsExportOptions;
        this.sourceBackup = $.sourceBackup;
    }

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

    public static final class Builder {
        private InstanceFileSharesArgs $;

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

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

        /**
         * @param capacityGb File share capacity in GiB. This must be at least 1024 GiB
         * for the standard tier, or 2560 GiB for the premium tier.
         * 
         * @return builder
         * 
         */
        public Builder capacityGb(Output<Integer> capacityGb) {
            $.capacityGb = capacityGb;
            return this;
        }

        /**
         * @param capacityGb File share capacity in GiB. This must be at least 1024 GiB
         * for the standard tier, or 2560 GiB for the premium tier.
         * 
         * @return builder
         * 
         */
        public Builder capacityGb(Integer capacityGb) {
            return capacityGb(Output.of(capacityGb));
        }

        /**
         * @param name The name of the fileshare (16 characters or less)
         * 
         * @return builder
         * 
         */
        public Builder name(Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name of the fileshare (16 characters or less)
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param nfsExportOptions Nfs Export Options. There is a limit of 10 export options per file share.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder nfsExportOptions(@Nullable Output<List<InstanceFileSharesNfsExportOptionArgs>> nfsExportOptions) {
            $.nfsExportOptions = nfsExportOptions;
            return this;
        }

        /**
         * @param nfsExportOptions Nfs Export Options. There is a limit of 10 export options per file share.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder nfsExportOptions(List<InstanceFileSharesNfsExportOptionArgs> nfsExportOptions) {
            return nfsExportOptions(Output.of(nfsExportOptions));
        }

        /**
         * @param nfsExportOptions Nfs Export Options. There is a limit of 10 export options per file share.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder nfsExportOptions(InstanceFileSharesNfsExportOptionArgs... nfsExportOptions) {
            return nfsExportOptions(List.of(nfsExportOptions));
        }

        /**
         * @param sourceBackup (Output)
         * The resource name of the backup, in the format
         * projects/{projectId}/locations/{locationId}/backups/{backupId},
         * that this file share has been restored from.
         * 
         * @return builder
         * 
         */
        public Builder sourceBackup(@Nullable Output<String> sourceBackup) {
            $.sourceBackup = sourceBackup;
            return this;
        }

        /**
         * @param sourceBackup (Output)
         * The resource name of the backup, in the format
         * projects/{projectId}/locations/{locationId}/backups/{backupId},
         * that this file share has been restored from.
         * 
         * @return builder
         * 
         */
        public Builder sourceBackup(String sourceBackup) {
            return sourceBackup(Output.of(sourceBackup));
        }

        public InstanceFileSharesArgs build() {
            $.capacityGb = Objects.requireNonNull($.capacityGb, "expected parameter 'capacityGb' to be non-null");
            $.name = Objects.requireNonNull($.name, "expected parameter 'name' to be non-null");
            return $;
        }
    }

}
