# 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.YouTube.V3.Model.PlaylistItem do
  @moduledoc """
  A *playlistItem* resource identifies another resource, such as a video, that is included in a playlist. In addition, the playlistItem resource contains details about the included resource that pertain specifically to how that resource is used in that playlist. YouTube uses playlists to identify special collections of videos for a channel, such as: - uploaded videos - favorite videos - positively rated (liked) videos - watch history - watch later To be more specific, these lists are associated with a channel, which is a collection of a person, group, or company's videos, playlists, and other YouTube information. You can retrieve the playlist IDs for each of these lists from the channel resource for a given channel. You can then use the playlistItems.list method to retrieve any of those lists. You can also add or remove items from those lists by calling the playlistItems.insert and playlistItems.delete methods. For example, if a user gives a positive rating to a video, you would insert that video into the liked videos playlist for that user's channel.

  ## Attributes

  *   `contentDetails` (*type:* `GoogleApi.YouTube.V3.Model.PlaylistItemContentDetails.t`, *default:* `nil`) - The contentDetails object is included in the resource if the included item is a YouTube video. The object contains additional information about the video.
  *   `etag` (*type:* `String.t`, *default:* `nil`) - Etag of this resource.
  *   `id` (*type:* `String.t`, *default:* `nil`) - The ID that YouTube uses to uniquely identify the playlist item.
  *   `kind` (*type:* `String.t`, *default:* `youtube#playlistItem`) - Identifies what kind of resource this is. Value: the fixed string "youtube#playlistItem".
  *   `snippet` (*type:* `GoogleApi.YouTube.V3.Model.PlaylistItemSnippet.t`, *default:* `nil`) - The snippet object contains basic details about the playlist item, such as its title and position in the playlist.
  *   `status` (*type:* `GoogleApi.YouTube.V3.Model.PlaylistItemStatus.t`, *default:* `nil`) - The status object contains information about the playlist item's privacy status.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :contentDetails => GoogleApi.YouTube.V3.Model.PlaylistItemContentDetails.t() | nil,
          :etag => String.t() | nil,
          :id => String.t() | nil,
          :kind => String.t() | nil,
          :snippet => GoogleApi.YouTube.V3.Model.PlaylistItemSnippet.t() | nil,
          :status => GoogleApi.YouTube.V3.Model.PlaylistItemStatus.t() | nil
        }

  field(:contentDetails, as: GoogleApi.YouTube.V3.Model.PlaylistItemContentDetails)
  field(:etag)
  field(:id)
  field(:kind)
  field(:snippet, as: GoogleApi.YouTube.V3.Model.PlaylistItemSnippet)
  field(:status, as: GoogleApi.YouTube.V3.Model.PlaylistItemStatus)
end

defimpl Poison.Decoder, for: GoogleApi.YouTube.V3.Model.PlaylistItem do
  def decode(value, options) do
    GoogleApi.YouTube.V3.Model.PlaylistItem.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.YouTube.V3.Model.PlaylistItem do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
