# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.CloudTasks.V2beta2.Model.Task do
  @moduledoc """
  A unit of scheduled work.

  ## Attributes

  *   `appEngineHttpRequest` (*type:* `GoogleApi.CloudTasks.V2beta2.Model.AppEngineHttpRequest.t`, *default:* `nil`) - App Engine HTTP request that is sent to the task's target. Can be set only if app_engine_http_target is set on the queue. An App Engine task is a task that has AppEngineHttpRequest set.
  *   `createTime` (*type:* `DateTime.t`, *default:* `nil`) - Output only. The time that the task was created. `create_time` will be truncated to the nearest second.
  *   `httpRequest` (*type:* `GoogleApi.CloudTasks.V2beta2.Model.HttpRequest.t`, *default:* `nil`) - HTTP request that is sent to the task's target. An HTTP task is a task that has HttpRequest set.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Optionally caller-specified in CreateTask. The task name. The task name must have the following format: `projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/TASK_ID` * `PROJECT_ID` can contain letters ([A-Za-z]), numbers ([0-9]), hyphens (-), colons (:), or periods (.). For more information, see [Identifying projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects) * `LOCATION_ID` is the canonical ID for the task's location. The list of available locations can be obtained by calling ListLocations. For more information, see https://cloud.google.com/about/locations/. * `QUEUE_ID` can contain letters ([A-Za-z]), numbers ([0-9]), or hyphens (-). The maximum length is 100 characters. * `TASK_ID` can contain only letters ([A-Za-z]), numbers ([0-9]), hyphens (-), or underscores (_). The maximum length is 500 characters.
  *   `pullMessage` (*type:* `GoogleApi.CloudTasks.V2beta2.Model.PullMessage.t`, *default:* `nil`) - LeaseTasks to process the task. Can be set only if pull_target is set on the queue. A pull task is a task that has PullMessage set.
  *   `scheduleTime` (*type:* `DateTime.t`, *default:* `nil`) - The time when the task is scheduled to be attempted. For App Engine queues, this is when the task will be attempted or retried. For pull queues, this is the time when the task is available to be leased; if a task is currently leased, this is the time when the current lease expires, that is, the time that the task was leased plus the lease_duration. `schedule_time` will be truncated to the nearest microsecond.
  *   `status` (*type:* `GoogleApi.CloudTasks.V2beta2.Model.TaskStatus.t`, *default:* `nil`) - Output only. The task status.
  *   `view` (*type:* `String.t`, *default:* `nil`) - Output only. The view specifies which subset of the Task has been returned.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :appEngineHttpRequest =>
            GoogleApi.CloudTasks.V2beta2.Model.AppEngineHttpRequest.t() | nil,
          :createTime => DateTime.t() | nil,
          :httpRequest => GoogleApi.CloudTasks.V2beta2.Model.HttpRequest.t() | nil,
          :name => String.t() | nil,
          :pullMessage => GoogleApi.CloudTasks.V2beta2.Model.PullMessage.t() | nil,
          :scheduleTime => DateTime.t() | nil,
          :status => GoogleApi.CloudTasks.V2beta2.Model.TaskStatus.t() | nil,
          :view => String.t() | nil
        }

  field(:appEngineHttpRequest, as: GoogleApi.CloudTasks.V2beta2.Model.AppEngineHttpRequest)
  field(:createTime, as: DateTime)
  field(:httpRequest, as: GoogleApi.CloudTasks.V2beta2.Model.HttpRequest)
  field(:name)
  field(:pullMessage, as: GoogleApi.CloudTasks.V2beta2.Model.PullMessage)
  field(:scheduleTime, as: DateTime)
  field(:status, as: GoogleApi.CloudTasks.V2beta2.Model.TaskStatus)
  field(:view)
end

defimpl Poison.Decoder, for: GoogleApi.CloudTasks.V2beta2.Model.Task do
  def decode(value, options) do
    GoogleApi.CloudTasks.V2beta2.Model.Task.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.CloudTasks.V2beta2.Model.Task do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
