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

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


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

    public static final UploadArgs Empty = new UploadArgs();

    /**
     * The upload&#39;s content type (for example, application/octet-stream).
     * 
     */
    @Import(name="contentType")
    private @Nullable Output<String> contentType;

    /**
     * @return The upload&#39;s content type (for example, application/octet-stream).
     * 
     */
    public Optional<Output<String>> contentType() {
        return Optional.ofNullable(this.contentType);
    }

    /**
     * The upload&#39;s file name. The name should not contain any forward slashes (/). If you are uploading an iOS app, the file name must end with the .ipa extension. If you are uploading an Android app, the file name must end with the .apk extension. For all others, the file name must end with the .zip file extension.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The upload&#39;s file name. The name should not contain any forward slashes (/). If you are uploading an iOS app, the file name must end with the .ipa extension. If you are uploading an Android app, the file name must end with the .apk extension. For all others, the file name must end with the .zip file extension.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The ARN of the project for the upload.
     * 
     */
    @Import(name="projectArn", required=true)
    private Output<String> projectArn;

    /**
     * @return The ARN of the project for the upload.
     * 
     */
    public Output<String> projectArn() {
        return this.projectArn;
    }

    /**
     * The upload&#39;s upload type. See [AWS Docs](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_CreateUpload.html#API_CreateUpload_RequestSyntax) for valid list of values.
     * 
     */
    @Import(name="type", required=true)
    private Output<String> type;

    /**
     * @return The upload&#39;s upload type. See [AWS Docs](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_CreateUpload.html#API_CreateUpload_RequestSyntax) for valid list of values.
     * 
     */
    public Output<String> type() {
        return this.type;
    }

    private UploadArgs() {}

    private UploadArgs(UploadArgs $) {
        this.contentType = $.contentType;
        this.name = $.name;
        this.projectArn = $.projectArn;
        this.type = $.type;
    }

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

    public static final class Builder {
        private UploadArgs $;

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

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

        /**
         * @param contentType The upload&#39;s content type (for example, application/octet-stream).
         * 
         * @return builder
         * 
         */
        public Builder contentType(@Nullable Output<String> contentType) {
            $.contentType = contentType;
            return this;
        }

        /**
         * @param contentType The upload&#39;s content type (for example, application/octet-stream).
         * 
         * @return builder
         * 
         */
        public Builder contentType(String contentType) {
            return contentType(Output.of(contentType));
        }

        /**
         * @param name The upload&#39;s file name. The name should not contain any forward slashes (/). If you are uploading an iOS app, the file name must end with the .ipa extension. If you are uploading an Android app, the file name must end with the .apk extension. For all others, the file name must end with the .zip file extension.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The upload&#39;s file name. The name should not contain any forward slashes (/). If you are uploading an iOS app, the file name must end with the .ipa extension. If you are uploading an Android app, the file name must end with the .apk extension. For all others, the file name must end with the .zip file extension.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param projectArn The ARN of the project for the upload.
         * 
         * @return builder
         * 
         */
        public Builder projectArn(Output<String> projectArn) {
            $.projectArn = projectArn;
            return this;
        }

        /**
         * @param projectArn The ARN of the project for the upload.
         * 
         * @return builder
         * 
         */
        public Builder projectArn(String projectArn) {
            return projectArn(Output.of(projectArn));
        }

        /**
         * @param type The upload&#39;s upload type. See [AWS Docs](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_CreateUpload.html#API_CreateUpload_RequestSyntax) for valid list of values.
         * 
         * @return builder
         * 
         */
        public Builder type(Output<String> type) {
            $.type = type;
            return this;
        }

        /**
         * @param type The upload&#39;s upload type. See [AWS Docs](https://docs.aws.amazon.com/devicefarm/latest/APIReference/API_CreateUpload.html#API_CreateUpload_RequestSyntax) for valid list of values.
         * 
         * @return builder
         * 
         */
        public Builder type(String type) {
            return type(Output.of(type));
        }

        public UploadArgs build() {
            $.projectArn = Objects.requireNonNull($.projectArn, "expected parameter 'projectArn' to be non-null");
            $.type = Objects.requireNonNull($.type, "expected parameter 'type' to be non-null");
            return $;
        }
    }

}
