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

import com.pulumi.azure.storage.inputs.GetShareAclArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class GetShareArgs extends com.pulumi.resources.InvokeArgs {

    public static final GetShareArgs Empty = new GetShareArgs();

    /**
     * One or more acl blocks as defined below.
     * 
     */
    @Import(name="acls")
    private @Nullable Output<List<GetShareAclArgs>> acls;

    /**
     * @return One or more acl blocks as defined below.
     * 
     */
    public Optional<Output<List<GetShareAclArgs>>> acls() {
        return Optional.ofNullable(this.acls);
    }

    /**
     * A map of custom file share metadata.
     * 
     */
    @Import(name="metadata")
    private @Nullable Output<Map<String,String>> metadata;

    /**
     * @return A map of custom file share metadata.
     * 
     */
    public Optional<Output<Map<String,String>>> metadata() {
        return Optional.ofNullable(this.metadata);
    }

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

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

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

    /**
     * @return The name of the storage account.
     * 
     */
    public Output<String> storageAccountName() {
        return this.storageAccountName;
    }

    private GetShareArgs() {}

    private GetShareArgs(GetShareArgs $) {
        this.acls = $.acls;
        this.metadata = $.metadata;
        this.name = $.name;
        this.storageAccountName = $.storageAccountName;
    }

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

    public static final class Builder {
        private GetShareArgs $;

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

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

        /**
         * @param acls One or more acl blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder acls(@Nullable Output<List<GetShareAclArgs>> acls) {
            $.acls = acls;
            return this;
        }

        /**
         * @param acls One or more acl blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder acls(List<GetShareAclArgs> acls) {
            return acls(Output.of(acls));
        }

        /**
         * @param acls One or more acl blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder acls(GetShareAclArgs... acls) {
            return acls(List.of(acls));
        }

        /**
         * @param metadata A map of custom file share metadata.
         * 
         * @return builder
         * 
         */
        public Builder metadata(@Nullable Output<Map<String,String>> metadata) {
            $.metadata = metadata;
            return this;
        }

        /**
         * @param metadata A map of custom file share metadata.
         * 
         * @return builder
         * 
         */
        public Builder metadata(Map<String,String> metadata) {
            return metadata(Output.of(metadata));
        }

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

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

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

        /**
         * @param storageAccountName The name of the storage account.
         * 
         * @return builder
         * 
         */
        public Builder storageAccountName(String storageAccountName) {
            return storageAccountName(Output.of(storageAccountName));
        }

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

}
