# 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
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# 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.Queue do
  @moduledoc """
  A queue is a container of related tasks. Queues are configured to manage how those tasks are dispatched. Configurable properties include rate limits, retry options, queue types, and others.

  ## Attributes

  *   `appEngineRoutingOverride` (*type:* `GoogleApi.CloudTasks.V2.Model.AppEngineRouting.t`, *default:* `nil`) - Overrides for task-level app_engine_routing. These settings apply only to App Engine tasks in this queue. Http tasks are not affected. If set, `app_engine_routing_override` is used for all App Engine tasks in the queue, no matter what the setting is for the task-level app_engine_routing.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Caller-specified and required in CreateQueue, after which it becomes output only. The queue name. The queue name must have the following format: `projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID` * `PROJECT_ID` can contain letters ([A-Za-z]), numbers ([0-9]), hyphens (-), colons (:), or periods (.). For more information, see [Identifying projects]( * `LOCATION_ID` is the canonical ID for the queue's location. The list of available locations can be obtained by calling ListLocations. For more information, see * `QUEUE_ID` can contain letters ([A-Za-z]), numbers ([0-9]), or hyphens (-). The maximum length is 100 characters.
  *   `purgeTime` (*type:* `DateTime.t`, *default:* `nil`) - Output only. The last time this queue was purged. All tasks that were created before this time were purged. A queue can be purged using PurgeQueue, the [App Engine Task Queue SDK, or the Cloud Console]( Purge time will be truncated to the nearest microsecond. Purge time will be unset if the queue has never been purged.
  *   `rateLimits` (*type:* `GoogleApi.CloudTasks.V2.Model.RateLimits.t`, *default:* `nil`) - Rate limits for task dispatches. rate_limits and retry_config are related because they both control task attempts. However they control task attempts in different ways: * rate_limits controls the total rate of dispatches from a queue (i.e. all traffic dispatched from the queue, regardless of whether the dispatch is from a first attempt or a retry). * retry_config controls what happens to particular a task after its first attempt fails. That is, retry_config controls task retries (the second attempt, third attempt, etc). The queue's actual dispatch rate is the result of: * Number of tasks in the queue * User-specified throttling: rate_limits, retry_config, and the queue's state. * System throttling due to `429` (Too Many Requests) or `503` (Service Unavailable) responses from the worker, high error rates, or to smooth sudden large traffic spikes.
  *   `retryConfig` (*type:* `GoogleApi.CloudTasks.V2.Model.RetryConfig.t`, *default:* `nil`) - Settings that determine the retry behavior. * For tasks created using Cloud Tasks: the queue-level retry settings apply to all tasks in the queue that were created using Cloud Tasks. Retry settings cannot be set on individual tasks. * For tasks created using the App Engine SDK: the queue-level retry settings apply to all tasks in the queue which do not have retry settings explicitly set on the task and were created by the App Engine SDK. See [App Engine documentation](
  *   `stackdriverLoggingConfig` (*type:* `GoogleApi.CloudTasks.V2.Model.StackdriverLoggingConfig.t`, *default:* `nil`) - Configuration options for writing logs to [Stackdriver Logging]( If this field is unset, then no logs are written.
  *   `state` (*type:* `String.t`, *default:* `nil`) - Output only. The state of the queue. `state` can only be changed by calling PauseQueue, ResumeQueue, or uploading [queue.yaml/xml]( UpdateQueue cannot be used to change `state`.

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :appEngineRoutingOverride => GoogleApi.CloudTasks.V2.Model.AppEngineRouting.t() | nil,
          :name => String.t() | nil,
          :purgeTime => DateTime.t() | nil,
          :rateLimits => GoogleApi.CloudTasks.V2.Model.RateLimits.t() | nil,
          :retryConfig => GoogleApi.CloudTasks.V2.Model.RetryConfig.t() | nil,
          :stackdriverLoggingConfig =>
            GoogleApi.CloudTasks.V2.Model.StackdriverLoggingConfig.t() | nil,
          :state => String.t() | nil

  field(:appEngineRoutingOverride, as: GoogleApi.CloudTasks.V2.Model.AppEngineRouting)
  field(:purgeTime, as: DateTime)
  field(:rateLimits, as: GoogleApi.CloudTasks.V2.Model.RateLimits)
  field(:retryConfig, as: GoogleApi.CloudTasks.V2.Model.RetryConfig)
  field(:stackdriverLoggingConfig, as: GoogleApi.CloudTasks.V2.Model.StackdriverLoggingConfig)

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

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