# 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.Sheets.V4.Model.ProtectedRange do
  @moduledoc """
  A protected range.

  ## Attributes

  *   `description` (*type:* `String.t`, *default:* `nil`) - The description of this protected range.
  *   `editors` (*type:* `GoogleApi.Sheets.V4.Model.Editors.t`, *default:* `nil`) - The users and groups with edit access to the protected range. This field is only visible to users with edit access to the protected range and the document. Editors are not supported with warning_only protection.
  *   `namedRangeId` (*type:* `String.t`, *default:* `nil`) - The named range this protected range is backed by, if any. When writing, only one of range or named_range_id may be set.
  *   `protectedRangeId` (*type:* `integer()`, *default:* `nil`) - The ID of the protected range. This field is read-only.
  *   `range` (*type:* `GoogleApi.Sheets.V4.Model.GridRange.t`, *default:* `nil`) - The range that is being protected. The range may be fully unbounded, in which case this is considered a protected sheet. When writing, only one of range or named_range_id may be set.
  *   `requestingUserCanEdit` (*type:* `boolean()`, *default:* `nil`) - True if the user who requested this protected range can edit the protected area. This field is read-only.
  *   `unprotectedRanges` (*type:* `list(GoogleApi.Sheets.V4.Model.GridRange.t)`, *default:* `nil`) - The list of unprotected ranges within a protected sheet. Unprotected ranges are only supported on protected sheets.
  *   `warningOnly` (*type:* `boolean()`, *default:* `nil`) - True if this protected range will show a warning when editing. Warning-based protection means that every user can edit data in the protected range, except editing will prompt a warning asking the user to confirm the edit. When writing: if this field is true, then editors are ignored. Additionally, if this field is changed from true to false and the `editors` field is not set (nor included in the field mask), then the editors will be set to all the editors in the document.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :description => String.t() | nil,
          :editors => GoogleApi.Sheets.V4.Model.Editors.t() | nil,
          :namedRangeId => String.t() | nil,
          :protectedRangeId => integer() | nil,
          :range => GoogleApi.Sheets.V4.Model.GridRange.t() | nil,
          :requestingUserCanEdit => boolean() | nil,
          :unprotectedRanges => list(GoogleApi.Sheets.V4.Model.GridRange.t()) | nil,
          :warningOnly => boolean() | nil
        }

  field(:description)
  field(:editors, as: GoogleApi.Sheets.V4.Model.Editors)
  field(:namedRangeId)
  field(:protectedRangeId)
  field(:range, as: GoogleApi.Sheets.V4.Model.GridRange)
  field(:requestingUserCanEdit)
  field(:unprotectedRanges, as: GoogleApi.Sheets.V4.Model.GridRange, type: :list)
  field(:warningOnly)
end

defimpl Poison.Decoder, for: GoogleApi.Sheets.V4.Model.ProtectedRange do
  def decode(value, options) do
    GoogleApi.Sheets.V4.Model.ProtectedRange.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Sheets.V4.Model.ProtectedRange do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
