# 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.V2.Model.Task do
  @moduledoc """
  A unit of scheduled work.

  ## Attributes

  *   `appEngineHttpRequest` (*type:* `GoogleApi.CloudTasks.V2.Model.AppEngineHttpRequest.t`, *default:* `nil`) - HTTP request that is sent to the App Engine app handler. 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.
  *   `dispatchCount` (*type:* `integer()`, *default:* `nil`) - Output only. The number of attempts dispatched. This count includes attempts which have been dispatched but haven't received a response.
  *   `dispatchDeadline` (*type:* `String.t`, *default:* `nil`) - The deadline for requests sent to the worker. If the worker does not respond by this deadline then the request is cancelled and the attempt is marked as a `DEADLINE_EXCEEDED` failure. Cloud Tasks will retry the task according to the RetryConfig. Note that when the request is cancelled, Cloud Tasks will stop listening for the response, but whether the worker stops processing depends on the worker. For example, if the worker is stuck, it may not react to cancelled requests. The default and maximum values depend on the type of request: * For HTTP tasks, the default is 10 minutes. The deadline must be in the interval [15 seconds, 30 minutes]. * For App Engine tasks, 0 indicates that the request has the default deadline. The default deadline depends on the [scaling type](https://cloud.google.com/appengine/docs/standard/go/how-instances-are-managed#instance_scaling) of the service: 10 minutes for standard apps with automatic scaling, 24 hours for standard apps with manual and basic scaling, and 60 minutes for flex apps. If the request deadline is set, it must be in the interval [15 seconds, 24 hours 15 seconds]. Regardless of the task's `dispatch_deadline`, the app handler will not run for longer than than the service's timeout. We recommend setting the `dispatch_deadline` to at most a few seconds more than the app handler's timeout. For more information see [Timeouts](https://cloud.google.com/tasks/docs/creating-appengine-handlers#timeouts). The value must be given as a string that indicates the length of time (in seconds) followed by `s` (for "seconds"). For more information on the format, see the documentation for [Duration](https://protobuf.dev/reference/protobuf/google.protobuf/#duration). `dispatch_deadline` will be truncated to the nearest millisecond. The deadline is an approximate deadline.
  *   `firstAttempt` (*type:* `GoogleApi.CloudTasks.V2.Model.Attempt.t`, *default:* `nil`) - Output only. The status of the task's first attempt. Only dispatch_time will be set. The other Attempt information is not retained by Cloud Tasks.
  *   `httpRequest` (*type:* `GoogleApi.CloudTasks.V2.Model.HttpRequest.t`, *default:* `nil`) - HTTP request that is sent to the worker. An HTTP task is a task that has HttpRequest set.
  *   `lastAttempt` (*type:* `GoogleApi.CloudTasks.V2.Model.Attempt.t`, *default:* `nil`) - Output only. The status of the task's last attempt.
  *   `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.
  *   `responseCount` (*type:* `integer()`, *default:* `nil`) - Output only. The number of attempts which have received a response.
  *   `scheduleTime` (*type:* `DateTime.t`, *default:* `nil`) - The time when the task is scheduled to be attempted or retried. `schedule_time` will be truncated to the nearest microsecond.
  *   `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.V2.Model.AppEngineHttpRequest.t() | nil,
          :createTime => DateTime.t() | nil,
          :dispatchCount => integer() | nil,
          :dispatchDeadline => String.t() | nil,
          :firstAttempt => GoogleApi.CloudTasks.V2.Model.Attempt.t() | nil,
          :httpRequest => GoogleApi.CloudTasks.V2.Model.HttpRequest.t() | nil,
          :lastAttempt => GoogleApi.CloudTasks.V2.Model.Attempt.t() | nil,
          :name => String.t() | nil,
          :responseCount => integer() | nil,
          :scheduleTime => DateTime.t() | nil,
          :view => String.t() | nil
        }

  field(:appEngineHttpRequest, as: GoogleApi.CloudTasks.V2.Model.AppEngineHttpRequest)
  field(:createTime, as: DateTime)
  field(:dispatchCount)
  field(:dispatchDeadline)
  field(:firstAttempt, as: GoogleApi.CloudTasks.V2.Model.Attempt)
  field(:httpRequest, as: GoogleApi.CloudTasks.V2.Model.HttpRequest)
  field(:lastAttempt, as: GoogleApi.CloudTasks.V2.Model.Attempt)
  field(:name)
  field(:responseCount)
  field(:scheduleTime, as: DateTime)
  field(:view)
end

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

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