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

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 DeviceConfigArgs extends com.pulumi.resources.ResourceArgs {

    public static final DeviceConfigArgs Empty = new DeviceConfigArgs();

    /**
     * The device state data.
     * 
     */
    @Import(name="binaryData")
    private @Nullable Output<String> binaryData;

    /**
     * @return The device state data.
     * 
     */
    public Optional<Output<String>> binaryData() {
        return Optional.ofNullable(this.binaryData);
    }

    /**
     * (Output)
     * The time at which this configuration version was updated in Cloud IoT Core.
     * 
     */
    @Import(name="cloudUpdateTime")
    private @Nullable Output<String> cloudUpdateTime;

    /**
     * @return (Output)
     * The time at which this configuration version was updated in Cloud IoT Core.
     * 
     */
    public Optional<Output<String>> cloudUpdateTime() {
        return Optional.ofNullable(this.cloudUpdateTime);
    }

    /**
     * (Output)
     * The time at which Cloud IoT Core received the acknowledgment from the device,
     * indicating that the device has received this configuration version.
     * 
     */
    @Import(name="deviceAckTime")
    private @Nullable Output<String> deviceAckTime;

    /**
     * @return (Output)
     * The time at which Cloud IoT Core received the acknowledgment from the device,
     * indicating that the device has received this configuration version.
     * 
     */
    public Optional<Output<String>> deviceAckTime() {
        return Optional.ofNullable(this.deviceAckTime);
    }

    /**
     * (Output)
     * The version of this update.
     * 
     */
    @Import(name="version")
    private @Nullable Output<String> version;

    /**
     * @return (Output)
     * The version of this update.
     * 
     */
    public Optional<Output<String>> version() {
        return Optional.ofNullable(this.version);
    }

    private DeviceConfigArgs() {}

    private DeviceConfigArgs(DeviceConfigArgs $) {
        this.binaryData = $.binaryData;
        this.cloudUpdateTime = $.cloudUpdateTime;
        this.deviceAckTime = $.deviceAckTime;
        this.version = $.version;
    }

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

    public static final class Builder {
        private DeviceConfigArgs $;

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

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

        /**
         * @param binaryData The device state data.
         * 
         * @return builder
         * 
         */
        public Builder binaryData(@Nullable Output<String> binaryData) {
            $.binaryData = binaryData;
            return this;
        }

        /**
         * @param binaryData The device state data.
         * 
         * @return builder
         * 
         */
        public Builder binaryData(String binaryData) {
            return binaryData(Output.of(binaryData));
        }

        /**
         * @param cloudUpdateTime (Output)
         * The time at which this configuration version was updated in Cloud IoT Core.
         * 
         * @return builder
         * 
         */
        public Builder cloudUpdateTime(@Nullable Output<String> cloudUpdateTime) {
            $.cloudUpdateTime = cloudUpdateTime;
            return this;
        }

        /**
         * @param cloudUpdateTime (Output)
         * The time at which this configuration version was updated in Cloud IoT Core.
         * 
         * @return builder
         * 
         */
        public Builder cloudUpdateTime(String cloudUpdateTime) {
            return cloudUpdateTime(Output.of(cloudUpdateTime));
        }

        /**
         * @param deviceAckTime (Output)
         * The time at which Cloud IoT Core received the acknowledgment from the device,
         * indicating that the device has received this configuration version.
         * 
         * @return builder
         * 
         */
        public Builder deviceAckTime(@Nullable Output<String> deviceAckTime) {
            $.deviceAckTime = deviceAckTime;
            return this;
        }

        /**
         * @param deviceAckTime (Output)
         * The time at which Cloud IoT Core received the acknowledgment from the device,
         * indicating that the device has received this configuration version.
         * 
         * @return builder
         * 
         */
        public Builder deviceAckTime(String deviceAckTime) {
            return deviceAckTime(Output.of(deviceAckTime));
        }

        /**
         * @param version (Output)
         * The version of this update.
         * 
         * @return builder
         * 
         */
        public Builder version(@Nullable Output<String> version) {
            $.version = version;
            return this;
        }

        /**
         * @param version (Output)
         * The version of this update.
         * 
         * @return builder
         * 
         */
        public Builder version(String version) {
            return version(Output.of(version));
        }

        public DeviceConfigArgs build() {
            return $;
        }
    }

}
