# 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.Datastore.V1.Model.Key do
  @moduledoc """
  A unique identifier for an entity. If a key's partition ID or any of its path kinds or names are reserved/read-only, the key is reserved/read-only. A reserved/read-only key is forbidden in certain documented contexts.

  ## Attributes

  *   `partitionId` (*type:* `GoogleApi.Datastore.V1.Model.PartitionId.t`, *default:* `nil`) - Entities are partitioned into subsets, currently identified by a project ID and namespace ID. Queries are scoped to a single partition.
  *   `path` (*type:* `list(GoogleApi.Datastore.V1.Model.PathElement.t)`, *default:* `nil`) - The entity path. An entity path consists of one or more elements composed of a kind and a string or numerical identifier, which identify entities. The first element identifies a _root entity_, the second element identifies a _child_ of the root entity, the third element identifies a child of the second entity, and so forth. The entities identified by all prefixes of the path are called the element's _ancestors_. An entity path is always fully complete: *all* of the entity's ancestors are required to be in the path along with the entity identifier itself. The only exception is that in some documented cases, the identifier in the last path element (for the entity) itself may be omitted. For example, the last path element of the key of `Mutation.insert` may have no identifier. A path can never be empty, and a path can have at most 100 elements.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :partitionId => GoogleApi.Datastore.V1.Model.PartitionId.t() | nil,
          :path => list(GoogleApi.Datastore.V1.Model.PathElement.t()) | nil
        }

  field(:partitionId, as: GoogleApi.Datastore.V1.Model.PartitionId)
  field(:path, as: GoogleApi.Datastore.V1.Model.PathElement, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.Datastore.V1.Model.Key do
  def decode(value, options) do
    GoogleApi.Datastore.V1.Model.Key.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Datastore.V1.Model.Key do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
