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

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


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

    public static final GetEngineVersionPlainArgs Empty = new GetEngineVersionPlainArgs();

    /**
     * DB engine. (Default: `neptune`)
     * 
     */
    @Import(name="engine")
    private @Nullable String engine;

    /**
     * @return DB engine. (Default: `neptune`)
     * 
     */
    public Optional<String> engine() {
        return Optional.ofNullable(this.engine);
    }

    /**
     * Name of a specific DB parameter group family. An example parameter group family is `neptune1`.
     * 
     */
    @Import(name="parameterGroupFamily")
    private @Nullable String parameterGroupFamily;

    /**
     * @return Name of a specific DB parameter group family. An example parameter group family is `neptune1`.
     * 
     */
    public Optional<String> parameterGroupFamily() {
        return Optional.ofNullable(this.parameterGroupFamily);
    }

    /**
     * Ordered list of preferred engine versions. The first match in this list will be returned. If no preferred matches are found and the original search returned more than one result, an error is returned. If both the `version` and `preferred_versions` arguments are not configured, the data source will return the default version for the engine.
     * 
     */
    @Import(name="preferredVersions")
    private @Nullable List<String> preferredVersions;

    /**
     * @return Ordered list of preferred engine versions. The first match in this list will be returned. If no preferred matches are found and the original search returned more than one result, an error is returned. If both the `version` and `preferred_versions` arguments are not configured, the data source will return the default version for the engine.
     * 
     */
    public Optional<List<String>> preferredVersions() {
        return Optional.ofNullable(this.preferredVersions);
    }

    /**
     * Version of the DB engine. For example, `1.0.1.0`, `1.0.2.2`, and `1.0.3.0`. If both the `version` and `preferred_versions` arguments are not configured, the data source will return the default version for the engine.
     * 
     */
    @Import(name="version")
    private @Nullable String version;

    /**
     * @return Version of the DB engine. For example, `1.0.1.0`, `1.0.2.2`, and `1.0.3.0`. If both the `version` and `preferred_versions` arguments are not configured, the data source will return the default version for the engine.
     * 
     */
    public Optional<String> version() {
        return Optional.ofNullable(this.version);
    }

    private GetEngineVersionPlainArgs() {}

    private GetEngineVersionPlainArgs(GetEngineVersionPlainArgs $) {
        this.engine = $.engine;
        this.parameterGroupFamily = $.parameterGroupFamily;
        this.preferredVersions = $.preferredVersions;
        this.version = $.version;
    }

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

    public static final class Builder {
        private GetEngineVersionPlainArgs $;

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

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

        /**
         * @param engine DB engine. (Default: `neptune`)
         * 
         * @return builder
         * 
         */
        public Builder engine(@Nullable String engine) {
            $.engine = engine;
            return this;
        }

        /**
         * @param parameterGroupFamily Name of a specific DB parameter group family. An example parameter group family is `neptune1`.
         * 
         * @return builder
         * 
         */
        public Builder parameterGroupFamily(@Nullable String parameterGroupFamily) {
            $.parameterGroupFamily = parameterGroupFamily;
            return this;
        }

        /**
         * @param preferredVersions Ordered list of preferred engine versions. The first match in this list will be returned. If no preferred matches are found and the original search returned more than one result, an error is returned. If both the `version` and `preferred_versions` arguments are not configured, the data source will return the default version for the engine.
         * 
         * @return builder
         * 
         */
        public Builder preferredVersions(@Nullable List<String> preferredVersions) {
            $.preferredVersions = preferredVersions;
            return this;
        }

        /**
         * @param preferredVersions Ordered list of preferred engine versions. The first match in this list will be returned. If no preferred matches are found and the original search returned more than one result, an error is returned. If both the `version` and `preferred_versions` arguments are not configured, the data source will return the default version for the engine.
         * 
         * @return builder
         * 
         */
        public Builder preferredVersions(String... preferredVersions) {
            return preferredVersions(List.of(preferredVersions));
        }

        /**
         * @param version Version of the DB engine. For example, `1.0.1.0`, `1.0.2.2`, and `1.0.3.0`. If both the `version` and `preferred_versions` arguments are not configured, the data source will return the default version for the engine.
         * 
         * @return builder
         * 
         */
        public Builder version(@Nullable String version) {
            $.version = version;
            return this;
        }

        public GetEngineVersionPlainArgs build() {
            return $;
        }
    }

}
