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

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


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

    public static final BrokerLdapServerMetadataArgs Empty = new BrokerLdapServerMetadataArgs();

    /**
     * List of a fully qualified domain name of the LDAP server and an optional failover server.
     * 
     */
    @Import(name="hosts")
    private @Nullable Output<List<String>> hosts;

    /**
     * @return List of a fully qualified domain name of the LDAP server and an optional failover server.
     * 
     */
    public Optional<Output<List<String>>> hosts() {
        return Optional.ofNullable(this.hosts);
    }

    /**
     * Fully qualified name of the directory to search for a user’s groups.
     * 
     */
    @Import(name="roleBase")
    private @Nullable Output<String> roleBase;

    /**
     * @return Fully qualified name of the directory to search for a user’s groups.
     * 
     */
    public Optional<Output<String>> roleBase() {
        return Optional.ofNullable(this.roleBase);
    }

    /**
     * Specifies the LDAP attribute that identifies the group name attribute in the object returned from the group membership query.
     * 
     */
    @Import(name="roleName")
    private @Nullable Output<String> roleName;

    /**
     * @return Specifies the LDAP attribute that identifies the group name attribute in the object returned from the group membership query.
     * 
     */
    public Optional<Output<String>> roleName() {
        return Optional.ofNullable(this.roleName);
    }

    /**
     * Search criteria for groups.
     * 
     */
    @Import(name="roleSearchMatching")
    private @Nullable Output<String> roleSearchMatching;

    /**
     * @return Search criteria for groups.
     * 
     */
    public Optional<Output<String>> roleSearchMatching() {
        return Optional.ofNullable(this.roleSearchMatching);
    }

    /**
     * Whether the directory search scope is the entire sub-tree.
     * 
     */
    @Import(name="roleSearchSubtree")
    private @Nullable Output<Boolean> roleSearchSubtree;

    /**
     * @return Whether the directory search scope is the entire sub-tree.
     * 
     */
    public Optional<Output<Boolean>> roleSearchSubtree() {
        return Optional.ofNullable(this.roleSearchSubtree);
    }

    /**
     * Service account password.
     * 
     */
    @Import(name="serviceAccountPassword")
    private @Nullable Output<String> serviceAccountPassword;

    /**
     * @return Service account password.
     * 
     */
    public Optional<Output<String>> serviceAccountPassword() {
        return Optional.ofNullable(this.serviceAccountPassword);
    }

    /**
     * Service account username.
     * 
     */
    @Import(name="serviceAccountUsername")
    private @Nullable Output<String> serviceAccountUsername;

    /**
     * @return Service account username.
     * 
     */
    public Optional<Output<String>> serviceAccountUsername() {
        return Optional.ofNullable(this.serviceAccountUsername);
    }

    /**
     * Fully qualified name of the directory where you want to search for users.
     * 
     */
    @Import(name="userBase")
    private @Nullable Output<String> userBase;

    /**
     * @return Fully qualified name of the directory where you want to search for users.
     * 
     */
    public Optional<Output<String>> userBase() {
        return Optional.ofNullable(this.userBase);
    }

    /**
     * Specifies the name of the LDAP attribute for the user group membership.
     * 
     */
    @Import(name="userRoleName")
    private @Nullable Output<String> userRoleName;

    /**
     * @return Specifies the name of the LDAP attribute for the user group membership.
     * 
     */
    public Optional<Output<String>> userRoleName() {
        return Optional.ofNullable(this.userRoleName);
    }

    /**
     * Search criteria for users.
     * 
     */
    @Import(name="userSearchMatching")
    private @Nullable Output<String> userSearchMatching;

    /**
     * @return Search criteria for users.
     * 
     */
    public Optional<Output<String>> userSearchMatching() {
        return Optional.ofNullable(this.userSearchMatching);
    }

    /**
     * Whether the directory search scope is the entire sub-tree.
     * 
     */
    @Import(name="userSearchSubtree")
    private @Nullable Output<Boolean> userSearchSubtree;

    /**
     * @return Whether the directory search scope is the entire sub-tree.
     * 
     */
    public Optional<Output<Boolean>> userSearchSubtree() {
        return Optional.ofNullable(this.userSearchSubtree);
    }

    private BrokerLdapServerMetadataArgs() {}

    private BrokerLdapServerMetadataArgs(BrokerLdapServerMetadataArgs $) {
        this.hosts = $.hosts;
        this.roleBase = $.roleBase;
        this.roleName = $.roleName;
        this.roleSearchMatching = $.roleSearchMatching;
        this.roleSearchSubtree = $.roleSearchSubtree;
        this.serviceAccountPassword = $.serviceAccountPassword;
        this.serviceAccountUsername = $.serviceAccountUsername;
        this.userBase = $.userBase;
        this.userRoleName = $.userRoleName;
        this.userSearchMatching = $.userSearchMatching;
        this.userSearchSubtree = $.userSearchSubtree;
    }

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

    public static final class Builder {
        private BrokerLdapServerMetadataArgs $;

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

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

        /**
         * @param hosts List of a fully qualified domain name of the LDAP server and an optional failover server.
         * 
         * @return builder
         * 
         */
        public Builder hosts(@Nullable Output<List<String>> hosts) {
            $.hosts = hosts;
            return this;
        }

        /**
         * @param hosts List of a fully qualified domain name of the LDAP server and an optional failover server.
         * 
         * @return builder
         * 
         */
        public Builder hosts(List<String> hosts) {
            return hosts(Output.of(hosts));
        }

        /**
         * @param hosts List of a fully qualified domain name of the LDAP server and an optional failover server.
         * 
         * @return builder
         * 
         */
        public Builder hosts(String... hosts) {
            return hosts(List.of(hosts));
        }

        /**
         * @param roleBase Fully qualified name of the directory to search for a user’s groups.
         * 
         * @return builder
         * 
         */
        public Builder roleBase(@Nullable Output<String> roleBase) {
            $.roleBase = roleBase;
            return this;
        }

        /**
         * @param roleBase Fully qualified name of the directory to search for a user’s groups.
         * 
         * @return builder
         * 
         */
        public Builder roleBase(String roleBase) {
            return roleBase(Output.of(roleBase));
        }

        /**
         * @param roleName Specifies the LDAP attribute that identifies the group name attribute in the object returned from the group membership query.
         * 
         * @return builder
         * 
         */
        public Builder roleName(@Nullable Output<String> roleName) {
            $.roleName = roleName;
            return this;
        }

        /**
         * @param roleName Specifies the LDAP attribute that identifies the group name attribute in the object returned from the group membership query.
         * 
         * @return builder
         * 
         */
        public Builder roleName(String roleName) {
            return roleName(Output.of(roleName));
        }

        /**
         * @param roleSearchMatching Search criteria for groups.
         * 
         * @return builder
         * 
         */
        public Builder roleSearchMatching(@Nullable Output<String> roleSearchMatching) {
            $.roleSearchMatching = roleSearchMatching;
            return this;
        }

        /**
         * @param roleSearchMatching Search criteria for groups.
         * 
         * @return builder
         * 
         */
        public Builder roleSearchMatching(String roleSearchMatching) {
            return roleSearchMatching(Output.of(roleSearchMatching));
        }

        /**
         * @param roleSearchSubtree Whether the directory search scope is the entire sub-tree.
         * 
         * @return builder
         * 
         */
        public Builder roleSearchSubtree(@Nullable Output<Boolean> roleSearchSubtree) {
            $.roleSearchSubtree = roleSearchSubtree;
            return this;
        }

        /**
         * @param roleSearchSubtree Whether the directory search scope is the entire sub-tree.
         * 
         * @return builder
         * 
         */
        public Builder roleSearchSubtree(Boolean roleSearchSubtree) {
            return roleSearchSubtree(Output.of(roleSearchSubtree));
        }

        /**
         * @param serviceAccountPassword Service account password.
         * 
         * @return builder
         * 
         */
        public Builder serviceAccountPassword(@Nullable Output<String> serviceAccountPassword) {
            $.serviceAccountPassword = serviceAccountPassword;
            return this;
        }

        /**
         * @param serviceAccountPassword Service account password.
         * 
         * @return builder
         * 
         */
        public Builder serviceAccountPassword(String serviceAccountPassword) {
            return serviceAccountPassword(Output.of(serviceAccountPassword));
        }

        /**
         * @param serviceAccountUsername Service account username.
         * 
         * @return builder
         * 
         */
        public Builder serviceAccountUsername(@Nullable Output<String> serviceAccountUsername) {
            $.serviceAccountUsername = serviceAccountUsername;
            return this;
        }

        /**
         * @param serviceAccountUsername Service account username.
         * 
         * @return builder
         * 
         */
        public Builder serviceAccountUsername(String serviceAccountUsername) {
            return serviceAccountUsername(Output.of(serviceAccountUsername));
        }

        /**
         * @param userBase Fully qualified name of the directory where you want to search for users.
         * 
         * @return builder
         * 
         */
        public Builder userBase(@Nullable Output<String> userBase) {
            $.userBase = userBase;
            return this;
        }

        /**
         * @param userBase Fully qualified name of the directory where you want to search for users.
         * 
         * @return builder
         * 
         */
        public Builder userBase(String userBase) {
            return userBase(Output.of(userBase));
        }

        /**
         * @param userRoleName Specifies the name of the LDAP attribute for the user group membership.
         * 
         * @return builder
         * 
         */
        public Builder userRoleName(@Nullable Output<String> userRoleName) {
            $.userRoleName = userRoleName;
            return this;
        }

        /**
         * @param userRoleName Specifies the name of the LDAP attribute for the user group membership.
         * 
         * @return builder
         * 
         */
        public Builder userRoleName(String userRoleName) {
            return userRoleName(Output.of(userRoleName));
        }

        /**
         * @param userSearchMatching Search criteria for users.
         * 
         * @return builder
         * 
         */
        public Builder userSearchMatching(@Nullable Output<String> userSearchMatching) {
            $.userSearchMatching = userSearchMatching;
            return this;
        }

        /**
         * @param userSearchMatching Search criteria for users.
         * 
         * @return builder
         * 
         */
        public Builder userSearchMatching(String userSearchMatching) {
            return userSearchMatching(Output.of(userSearchMatching));
        }

        /**
         * @param userSearchSubtree Whether the directory search scope is the entire sub-tree.
         * 
         * @return builder
         * 
         */
        public Builder userSearchSubtree(@Nullable Output<Boolean> userSearchSubtree) {
            $.userSearchSubtree = userSearchSubtree;
            return this;
        }

        /**
         * @param userSearchSubtree Whether the directory search scope is the entire sub-tree.
         * 
         * @return builder
         * 
         */
        public Builder userSearchSubtree(Boolean userSearchSubtree) {
            return userSearchSubtree(Output.of(userSearchSubtree));
        }

        public BrokerLdapServerMetadataArgs build() {
            return $;
        }
    }

}
