# 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.MyBusinessLodging.V1.Model.GuestUnitFeatures do
  @moduledoc """
  Features and available amenities in the guest unit.

  ## Attributes

  *   `bungalowOrVilla` (*type:* `boolean()`, *default:* `nil`) - Bungalow or villa. An independent structure that is part of a hotel or resort that is rented to one party for a vacation stay. The hotel or resort may be completely comprised of bungalows or villas, or they may be one of several guestroom options. Guests in the bungalows or villas most often have the same, if not more, amenities and services offered to guests in other guestroom types.
  *   `bungalowOrVillaException` (*type:* `String.t`, *default:* `nil`) - Bungalow or villa exception.
  *   `connectingUnitAvailable` (*type:* `boolean()`, *default:* `nil`) - Connecting unit available. A guestroom type that features access to an adjacent guestroom for the purpose of booking both rooms. Most often used by families who need more than one room to accommodate the number of people in their group.
  *   `connectingUnitAvailableException` (*type:* `String.t`, *default:* `nil`) - Connecting unit available exception.
  *   `executiveFloor` (*type:* `boolean()`, *default:* `nil`) - Executive floor. A floor of the hotel where the guestrooms are only bookable by members of the hotel's frequent guest membership program. Benefits of this room class include access to a designated lounge which may or may not feature free breakfast, cocktails or other perks specific to members of the program.
  *   `executiveFloorException` (*type:* `String.t`, *default:* `nil`) - Executive floor exception.
  *   `maxAdultOccupantsCount` (*type:* `integer()`, *default:* `nil`) - Max adult occupants count. The total number of adult guests allowed to stay overnight in the guestroom.
  *   `maxAdultOccupantsCountException` (*type:* `String.t`, *default:* `nil`) - Max adult occupants count exception.
  *   `maxChildOccupantsCount` (*type:* `integer()`, *default:* `nil`) - Max child occupants count. The total number of children allowed to stay overnight in the room.
  *   `maxChildOccupantsCountException` (*type:* `String.t`, *default:* `nil`) - Max child occupants count exception.
  *   `maxOccupantsCount` (*type:* `integer()`, *default:* `nil`) - Max occupants count. The total number of guests allowed to stay overnight in the guestroom.
  *   `maxOccupantsCountException` (*type:* `String.t`, *default:* `nil`) - Max occupants count exception.
  *   `privateHome` (*type:* `boolean()`, *default:* `nil`) - Private home. A privately owned home (house, townhouse, apartment, cabin, bungalow etc) that may or not serve as the owner's residence, but is rented out in its entirety or by the room(s) to paying guest(s) for vacation stays. Not for lease-based, long-term residency.
  *   `privateHomeException` (*type:* `String.t`, *default:* `nil`) - Private home exception.
  *   `suite` (*type:* `boolean()`, *default:* `nil`) - Suite. A guestroom category that implies both a bedroom area and a separate living area. There may or may not be full walls and doors separating the two areas, but regardless, they are very distinct. Does not mean a couch or chair in a bedroom.
  *   `suiteException` (*type:* `String.t`, *default:* `nil`) - Suite exception.
  *   `tier` (*type:* `String.t`, *default:* `nil`) - Tier. Classification of the unit based on available features/amenities. A non-standard tier is only permitted if at least one other unit type falls under the standard tier.
  *   `tierException` (*type:* `String.t`, *default:* `nil`) - Tier exception.
  *   `totalLivingAreas` (*type:* `GoogleApi.MyBusinessLodging.V1.Model.LivingArea.t`, *default:* `nil`) - Features available in the living areas in the guest unit.
  *   `views` (*type:* `GoogleApi.MyBusinessLodging.V1.Model.ViewsFromUnit.t`, *default:* `nil`) - Views available from the guest unit itself.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :bungalowOrVilla => boolean() | nil,
          :bungalowOrVillaException => String.t() | nil,
          :connectingUnitAvailable => boolean() | nil,
          :connectingUnitAvailableException => String.t() | nil,
          :executiveFloor => boolean() | nil,
          :executiveFloorException => String.t() | nil,
          :maxAdultOccupantsCount => integer() | nil,
          :maxAdultOccupantsCountException => String.t() | nil,
          :maxChildOccupantsCount => integer() | nil,
          :maxChildOccupantsCountException => String.t() | nil,
          :maxOccupantsCount => integer() | nil,
          :maxOccupantsCountException => String.t() | nil,
          :privateHome => boolean() | nil,
          :privateHomeException => String.t() | nil,
          :suite => boolean() | nil,
          :suiteException => String.t() | nil,
          :tier => String.t() | nil,
          :tierException => String.t() | nil,
          :totalLivingAreas => GoogleApi.MyBusinessLodging.V1.Model.LivingArea.t() | nil,
          :views => GoogleApi.MyBusinessLodging.V1.Model.ViewsFromUnit.t() | nil
        }

  field(:bungalowOrVilla)
  field(:bungalowOrVillaException)
  field(:connectingUnitAvailable)
  field(:connectingUnitAvailableException)
  field(:executiveFloor)
  field(:executiveFloorException)
  field(:maxAdultOccupantsCount)
  field(:maxAdultOccupantsCountException)
  field(:maxChildOccupantsCount)
  field(:maxChildOccupantsCountException)
  field(:maxOccupantsCount)
  field(:maxOccupantsCountException)
  field(:privateHome)
  field(:privateHomeException)
  field(:suite)
  field(:suiteException)
  field(:tier)
  field(:tierException)
  field(:totalLivingAreas, as: GoogleApi.MyBusinessLodging.V1.Model.LivingArea)
  field(:views, as: GoogleApi.MyBusinessLodging.V1.Model.ViewsFromUnit)
end

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

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