Google Lodging Format Protocol Buffer

// This proto relies on set vs. unset primitive-typed fields.
syntax = "proto3";

package hotels.knowledge_base.external;

option java_package = "com.google.travel.hotels.content.knowledge.base.schema.external";
option java_multiple_files = true;

// LodgingList is a wrapper message to store multiple Lodging instances.
message LodgingList {
  repeated Lodging lodgings = 1;
}

// Lodging represents factual information for a single property that provides
// accomodations.
message Lodging {
  // REQUIRED.
  Metadata metadata = 1;

  // REQUIRED. Unique Place ID identifier for the property.
  // https://developers.google.com/places/place-id.
  // Example: "ChIJrTLr-GyuEmsRBfy61i59si0".
  string place_id = 6;

  Property property = 12;

  Services services = 13;

  Policies policies = 14;

  FoodAndDrink food_and_drink = 15;

  Pools pools = 16;

  Wellness wellness = 17;

  Activities activities = 18;

  Transportation transportation = 19;

  Families families = 20;

  Connectivity connectivity = 21;

  Business business = 22;

  Accessibility accessibility = 23;

  Pets pets = 24;

  Parking parking = 25;

  Housekeeping housekeeping = 26;

  HealthAndSafety health_and_safety = 27;

  Sustainability sustainability = 28;

  // Living area features that are shared amongst guests,
  // such as shared bathrooms, kitchen areas, grills, etc.
  LivingArea common_living_area = 100;

  // All units on the property have at least these attributes.
  // E.g., a living area size means all units are at least that big.
  GuestUnitType all_units = 101;

  // Some units have as much as these attributes.
  // E.g., a living area size means it is possible to book a unit that big.
  GuestUnitType some_units = 102;

  // Individual GuestUnitTypes that are available in this Lodging.
  repeated GuestUnitType guest_units = 104;
}

/////////////////////////////
// Property level messages //
/////////////////////////////

message Property {
  // Built year.
  oneof built_year_oneof {
    int32 built_year = 2;
    Exception built_year_exception = 3;
  }

  // Last renovated year.
  oneof last_renovated_year_oneof {
    int32 last_renovated_year = 4;
    Exception last_renovated_year_exception = 5;
  }

  // Number of rooms.
  oneof number_of_rooms_oneof {
    int32 number_of_rooms = 6;
    Exception number_of_rooms_exception = 7;
  }

  // Floors.
  oneof floors_oneof {
    int32 floors = 8;
    Exception floors_exception = 9;
  }
}

message Services {
  // Class rating.
  oneof class_rating_oneof {
    // Class rating from 1.0 to 5.0.
    float class_rating = 2;
    Exception class_rating_exception = 3;
  }

  ///////////////////////
  // Reception and lobby.

  // Front desk.
  oneof front_desk_oneof {
    bool front_desk = 4;
    Exception front_desk_exception = 5;
  }

  // Front desk 24hrs.
  oneof front_desk_24hrs_oneof {
    bool front_desk_24hrs = 6;
    Exception front_desk_24hrs_exception = 7;
  }

  // Concierge.
  oneof concierge_oneof {
    bool concierge = 8;
    Exception concierge_exception = 9;
  }

  // Elevator.
  oneof elevator_oneof {
    bool elevator = 43;
    Exception elevator_exception = 44;
  }

  ////////////////
  // Conveniences.

  // Baggage storage.
  oneof baggage_storage_oneof {
    bool baggage_storage = 16;
    Exception baggage_storage_exception = 17;
  }

  // Laundry full service.
  oneof laundry_full_service_oneof {
    bool laundry_full_service = 18;
    Exception laundry_full_service_exception = 19;
  }

  // Laundry self service.
  oneof laundry_self_service_oneof {
    bool laundry_self_service = 20;
    Exception laundry_self_service_exception = 21;
  }

  // Social hour.
  oneof social_hour_oneof {
    bool social_hour = 22;
    Exception social_hour_exception = 23;
  }

  // Wake up calls.
  oneof wake_up_calls_oneof {
    bool wake_up_calls = 24;
    Exception wake_up_calls_exception = 25;
  }

  // Convenience store.
  oneof convenience_store_oneof {
    bool convenience_store = 26;
    Exception convenience_store_exception = 27;
  }

  // Gift shop.
  oneof gift_shop_oneof {
    bool gift_shop = 28;
    Exception gift_shop_exception = 29;
  }

  // Currency exchange.
  oneof currency_exchange_oneof {
    bool currency_exchange = 30;
    Exception currency_exchange_exception = 31;
  }

  LanguagesSpoken languages_spoken = 42;
}

message LanguagesSpoken {
  // Arabic spoken.
  oneof arabic_spoken_oneof {
    bool arabic_spoken = 1;
    Exception arabic_spoken_exception = 2;
  }

  // Cantonese spoken.
  oneof cantonese_spoken_oneof {
    bool cantonese_spoken = 3;
    Exception cantonese_spoken_exception = 4;
  }

  // Dutch spoken.
  oneof dutch_spoken_oneof {
    bool dutch_spoken = 5;
    Exception dutch_spoken_exception = 6;
  }

  // English spoken.
  oneof english_spoken_oneof {
    bool english_spoken = 7;
    Exception english_spoken_exception = 8;
  }

  // Filipino spoken.
  oneof filipino_spoken_oneof {
    bool filipino_spoken = 9;
    Exception filipino_spoken_exception = 10;
  }

  // French spoken.
  oneof french_spoken_oneof {
    bool french_spoken = 11;
    Exception french_spoken_exception = 12;
  }

  // German spoken.
  oneof german_spoken_oneof {
    bool german_spoken = 13;
    Exception german_spoken_exception = 14;
  }

  // Hindi spoken.
  oneof hindi_spoken_oneof {
    bool hindi_spoken = 15;
    Exception hindi_spoken_exception = 16;
  }

  // Indonesian spoken.
  oneof indonesian_spoken_oneof {
    bool indonesian_spoken = 17;
    Exception indonesian_spoken_exception = 18;
  }

  // Italian spoken.
  oneof italian_spoken_oneof {
    bool italian_spoken = 31;
    Exception italian_spoken_exception = 32;
  }

  // Japanese spoken.
  oneof japanese_spoken_oneof {
    bool japanese_spoken = 35;
    Exception japanese_spoken_exception = 36;
  }

  // Korean spoken.
  oneof korean_spoken_oneof {
    bool korean_spoken = 19;
    Exception korean_spoken_exception = 20;
  }

  // Mandarin spoken.
  oneof mandarin_spoken_oneof {
    bool mandarin_spoken = 21;
    Exception mandarin_spoken_exception = 22;
  }

  // Portuguese spoken.
  oneof portuguese_spoken_oneof {
    bool portuguese_spoken = 23;
    Exception portuguese_spoken_exception = 24;
  }

  // Russian spoken.
  oneof russian_spoken_oneof {
    bool russian_spoken = 33;
    Exception russian_spoken_exception = 34;
  }

  // Spanish spoken.
  oneof spanish_spoken_oneof {
    bool spanish_spoken = 25;
    Exception spanish_spoken_exception = 26;
  }

  // Vietnamese spoken.
  oneof vietnamese_spoken_oneof {
    bool vietnamese_spoken = 27;
    Exception vietnamese_spoken_exception = 28;
  }
}

message Housekeeping {
  // Housekeeping available.
  oneof housekeeping_available_oneof {
    bool housekeeping_available = 2;
    Exception housekeeping_available_exception = 3;
  }

  // Housekeeping daily.
  oneof housekeeping_daily_oneof {
    bool housekeeping_daily = 4;
    Exception housekeeping_daily_exception = 5;
  }

  // Turndown service.
  oneof turndown_service_oneof {
    bool turndown_service = 6;
    Exception turndown_service_exception = 7;
  }
}

message Parking {
  // Parking available.
  oneof parking_available_oneof {
    bool parking_available = 2;
    Exception parking_available_exception = 3;
  }

  // Parking for free.
  oneof parking_for_free_oneof {
    bool parking_for_free = 4;
    Exception parking_for_free_exception = 5;
  }

  // Self parking available.
  oneof self_parking_available_oneof {
    bool self_parking_available = 6;
    Exception self_parking_available_exception = 7;
  }

  // Self parking for free.
  oneof self_parking_for_free_oneof {
    bool self_parking_for_free = 8;
    Exception self_parking_for_free_exception = 9;
  }

  // Valet parking available.
  oneof valet_parking_available_oneof {
    bool valet_parking_available = 10;
    Exception valet_parking_available_exception = 11;
  }

  // Valet parking for free.
  oneof valet_parking_for_free_oneof {
    bool valet_parking_for_free = 12;
    Exception valet_parking_for_free_exception = 13;
  }

  // Electric car charging stations.
  oneof electric_car_charging_stations_oneof {
    bool electric_car_charging_stations = 14;
    Exception electric_car_charging_stations_exception = 15;
  }
}

message Policies {
  // Check in time.
  oneof check_in_time_oneof {
    // 24hr clock, e.g. "1500" or "1600", in hotel local time.
    // This is the ISO 8601 dense time format with minute precision.
    // For normalization, extended format (with colons) is not supported.
    string check_in_time = 4;
    Exception check_in_time_exception = 5;
  }

  // Check out time.
  oneof check_out_time_oneof {
    // 24hr clock, e.g. "1130" or "1200", in hotel local time.
    // This is the ISO 8601 dense time format with minute precision.
    // For normalization, extended format (with colons) is not supported.
    string check_out_time = 6;
    Exception check_out_time_exception = 7;
  }

  // Kids stay for free.
  oneof kids_stay_for_free_oneof {
    bool kids_stay_for_free = 24;
    Exception kids_stay_for_free_exception = 25;
  }

  // Max number of kids stay for free.
  oneof max_number_of_kids_stay_for_free_oneof {
    int32 max_number_of_kids_stay_for_free = 26;
    Exception max_number_of_kids_stay_for_free_exception = 27;
  }

  // Max child age.
  oneof max_child_age_oneof {
    int32 max_child_age = 28;
    Exception max_child_age_exception = 29;
  }

  // Smoke free property.
  oneof smoke_free_property_oneof {
    bool smoke_free_property = 30;
    Exception smoke_free_property_exception = 31;
  }

  // All inclusive rates available.
  oneof all_inclusive_available_oneof {
    bool all_inclusive_available = 32;
    Exception all_inclusive_available_exception = 33;
  }

  // All inclusive rates only.
  oneof all_inclusive_only_oneof {
    bool all_inclusive_only = 34;
    Exception all_inclusive_only_exception = 35;
  }

  PaymentOptions payment_options = 36;
}

message PaymentOptions {
  // Pay cash.
  oneof cash_oneof {
    bool cash = 2;
    Exception cash_exception = 3;
  }
  // Pay by cheque.
  oneof cheque_oneof {
    bool cheque = 4;
    Exception cheque_exception = 5;
  }

  // Pay credit card.
  oneof credit_card_oneof {
    bool credit_card = 6;
    Exception credit_card_exception = 7;
  }

  // Pay debit card.
  oneof debit_card_oneof {
    bool debit_card = 8;
    Exception debit_card_exception = 9;
  }

  // Pay mobile nfc.
  oneof mobile_nfc_oneof {
    bool mobile_nfc = 10;
    Exception mobile_nfc_exception = 11;
  }
}

message FoodAndDrink {
  // Room service.
  oneof room_service_oneof {
    bool room_service = 2;
    Exception room_service_exception = 3;
  }

  // Room service 24hrs.
  oneof room_service_24hrs_oneof {
    bool room_service_24hrs = 4;
    Exception room_service_24hrs_exception = 5;
  }

  // Existence of restaurant.
  oneof restaurant_oneof {
    bool restaurant = 24;
    Exception restaurant_exception = 25;
  }

  // Number of restaurants.
  oneof number_of_restaurants_oneof {
    int32 number_of_restaurants = 6;
    Exception number_of_restaurants_exception = 7;
  }

  // Table service.
  oneof table_service_oneof {
    bool table_service = 8;
    Exception table_service_exception = 9;
  }

  // Buffet.
  oneof buffet_oneof {
    bool buffet = 10;
    Exception buffet_exception = 11;
  }

  // Buffet dinner.
  oneof buffet_dinner_oneof {
    bool buffet_dinner = 12;
    Exception buffet_dinner_exception = 13;
  }

  // Buffet breakfast.
  oneof buffet_breakfast_oneof {
    bool buffet_breakfast = 14;
    Exception buffet_breakfast_exception = 15;
  }

  // Breakfast available.
  oneof breakfast_available_oneof {
    bool breakfast_available = 22;
    Exception breakfast_available_exception = 23;
  }

  // Breakfast for free.
  oneof breakfast_for_free_oneof {
    bool breakfast_for_free = 16;
    Exception breakfast_for_free_exception = 17;
  }

  // Bar.
  oneof bar_oneof {
    bool bar = 18;
    Exception bar_exception = 19;
  }

  // Vending machine.
  oneof vending_machine_oneof {
    bool vending_machine = 20;
    Exception vending_machine_exception = 21;
  }
}

message Pools {
  // Existence of pool.
  oneof pool_oneof {
    bool pool = 2;
    Exception pool_exception = 3;
  }

  // Number of pools.
  oneof number_of_pools_oneof {
    // Min count of all pools on property.
    int32 number_of_pools = 4;
    Exception number_of_pools_exception = 5;
  }

  // Existence of indoor pool.
  oneof indoor_pool_oneof {
    // Including hot tubs, adult pools, etc.
    bool indoor_pool = 30;
    Exception indoor_pool_exception = 31;
  }

  // Number of indoor pools.
  oneof number_of_indoor_pools_oneof {
    // Including hot tubs, adult pools, etc.
    int32 number_of_indoor_pools = 6;
    Exception number_of_indoor_pools_exception = 7;
  }

  // Existence of outdoor pool.
  oneof outdoor_pool_oneof {
    // Including hot tubs, lazy rivers, etc.
    bool outdoor_pool = 32;
    Exception outdoor_pool_exception = 33;
  }

  // Number of outdoor pools.
  oneof number_of_outdoor_pools_oneof {
    // Including hot tubs, lazy rivers, etc.
    int32 number_of_outdoor_pools = 8;
    Exception number_of_outdoor_pools_exception = 9;
  }

  // Hot tub.
  oneof hot_tub_oneof {
    bool hot_tub = 12;
    Exception hot_tub_exception = 13;
  }

  // Waterslide.
  oneof waterslide_oneof {
    bool waterslide = 14;
    Exception waterslide_exception = 15;
  }

  // Lazy river.
  oneof lazy_river_oneof {
    bool lazy_river = 16;
    Exception lazy_river_exception = 17;
  }

  // Adult pool.
  oneof adult_pool_oneof {
    bool adult_pool = 18;
    Exception adult_pool_exception = 19;
  }

  // Wading pool.
  oneof wading_pool_oneof {
    bool wading_pool = 20;
    Exception wading_pool_exception = 21;
  }

  // Wave pool.
  oneof wave_pool_oneof {
    bool wave_pool = 22;
    Exception wave_pool_exception = 23;
  }

  // Thermal pool.
  oneof thermal_pool_oneof {
    // Includes hot springs.
    bool thermal_pool = 24;
    Exception thermal_pool_exception = 25;
  }

  // Water park.
  oneof water_park_oneof {
    bool water_park = 26;
    Exception water_park_exception = 27;
  }

  // Lifeguard.
  oneof lifeguard_oneof {
    bool lifeguard = 28;
    Exception lifeguard_exception = 29;
  }
}

message Wellness {
  // Fitness center.
  oneof fitness_center_oneof {
    bool fitness_center = 4;
    Exception fitness_center_exception = 5;
  }

  // Fitness center for free.
  oneof fitness_center_for_free_oneof {
    bool fitness_center_for_free = 24;
    Exception fitness_center_for_free_exception = 25;
  }

  // Elliptical machine.
  oneof elliptical_machine_oneof {
    bool elliptical_machine = 6;
    Exception elliptical_machine_exception = 7;
  }

  // Treadmill.
  oneof treadmill_oneof {
    bool treadmill = 8;
    Exception treadmill_exception = 9;
  }

  // Weight machine.
  oneof weight_machine_oneof {
    bool weight_machine = 10;
    Exception weight_machine_exception = 11;
  }

  // Free weights.
  oneof free_weights_oneof {
    bool free_weights = 12;
    Exception free_weights_exception = 13;
  }

  // Spa.
  oneof spa_oneof {
    bool spa = 14;
    Exception spa_exception = 15;
  }

  // Salon.
  oneof salon_oneof {
    bool salon = 16;
    Exception salon_exception = 17;
  }

  // Sauna.
  oneof sauna_oneof {
    bool sauna = 18;
    Exception sauna_exception = 19;
  }

  // Massage.
  oneof massage_oneof {
    bool massage = 20;
    Exception massage_exception = 21;
  }

  //////////////
  // Healthcare.

  // Doctor on call.
  oneof doctor_on_call_oneof {
    bool doctor_on_call = 22;
    Exception doctor_on_call_exception = 23;
  }
}

message Activities {
  /////////////////////////
  // On-premise facilities.

  // Game room.
  oneof game_room_oneof {
    bool game_room = 2;
    Exception game_room_exception = 3;
  }

  // Nightclub.
  oneof nightclub_oneof {
    bool nightclub = 4;
    Exception nightclub_exception = 5;
  }

  // Casino.
  oneof casino_oneof {
    bool casino = 6;
    Exception casino_exception = 7;
  }

  // Boutique stores.
  oneof boutique_stores_oneof {
    bool boutique_stores = 8;
    Exception boutique_stores_exception = 9;
  }

  ////////////////////////////////////////////////////////////////
  // On-premise or adjacent sports facilities, possibly for a fee.

  // Tennis.
  oneof tennis_oneof {
    bool tennis = 10;
    Exception tennis_exception = 11;
  }

  // Golf.
  oneof golf_oneof {
    bool golf = 12;
    Exception golf_exception = 13;
  }

  // Horseback riding.
  oneof horseback_riding_oneof {
    bool horseback_riding = 14;
    Exception horseback_riding_exception = 15;
  }

  // Snorkeling.
  oneof snorkeling_oneof {
    bool snorkeling = 16;
    Exception snorkeling_exception = 17;
  }

  // Scuba.
  oneof scuba_oneof {
    bool scuba = 18;
    Exception scuba_exception = 19;
  }

  // Water skiing.
  oneof water_skiing_oneof {
    bool water_skiing = 20;
    Exception water_skiing_exception = 21;
  }

  // Bicycles rental.
  oneof bicycles_rental_oneof {
    bool bicycles_rental = 22;
    Exception bicycles_rental_exception = 23;
  }

  // Bicycles rental for free.
  oneof bicycles_rental_for_free_oneof {
    bool bicycles_rental_for_free = 24;
    Exception bicycles_rental_for_free_exception = 25;
  }

  // Watercraft rental.
  oneof watercraft_rental_oneof {
    bool watercraft_rental = 26;
    Exception watercraft_rental_exception = 27;
  }

  // Watercraft rental for free.
  oneof watercraft_rental_for_free_oneof {
    bool watercraft_rental_for_free = 28;
    Exception watercraft_rental_for_free_exception = 29;
  }

  // The property is directly accessible to a beach without users needing to
  // cross a public road.
  oneof beach_access_oneof {
    bool beach_access = 30;
    Exception beach_access_exception = 31;
  }

  // The property has a private beach that's only accessible by guests staying
  // at the property.
  oneof private_beach_oneof {
    bool private_beach = 32;
    Exception private_beach_exception = 33;
  }

  // The property is directly on the beach.
  oneof beach_front_oneof {
    bool beach_front = 34;
    Exception beach_front_exception = 35;
  }
}

message Transportation {
  // Transfer from/to lodging property.
  oneof transfer_oneof {
    bool transfer = 2;
    Exception transfer_exception = 3;
  }

  // Airport shuttle.
  oneof airport_shuttle_oneof {
    bool airport_shuttle = 4;
    Exception airport_shuttle_exception = 5;
  }

  // Airport shuttle for free.
  oneof airport_shuttle_for_free_oneof {
    bool airport_shuttle_for_free = 6;
    Exception airport_shuttle_for_free_exception = 7;
  }

  // Local shuttle.
  oneof local_shuttle_oneof {
    // Shuttle to local attractions and businesses.
    bool local_shuttle = 8;
    Exception local_shuttle_exception = 9;
  }

  // Car rental on property.
  oneof car_rental_on_property_oneof {
    bool car_rental_on_property = 10;
    Exception car_rental_on_property_exception = 11;
  }

  // Private car service.
  oneof private_car_service_oneof {
    // Private car services refers to taxis or black car as long as the car is
    // not shared.
    bool private_car_service = 12;
    Exception private_car_service_exception = 13;
  }

  // Private car service for free.
  oneof private_car_service_for_free_oneof {
    bool private_car_service_for_free = 14;
    Exception private_car_service_for_free_exception = 15;
  }
}

message Families {
  // Babysitting.
  oneof babysitting_oneof {
    bool babysitting = 4;
    Exception babysitting_exception = 5;
  }

  // Kids activities.
  oneof kids_activities_oneof {
    bool kids_activities = 6;
    Exception kids_activities_exception = 7;
  }

  // Kids club.
  oneof kids_club_oneof {
    bool kids_club = 8;
    Exception kids_club_exception = 9;
  }
}

message Connectivity {
  // Internet and WiFi options.

  // Wifi available.
  oneof wifi_available_oneof {
    bool wifi_available = 2;
    Exception wifi_available_exception = 3;
  }

  // Wifi for free.
  oneof wifi_for_free_oneof {
    bool wifi_for_free = 22;
    Exception wifi_for_free_exception = 23;
  }

  // Wifi in public areas.
  oneof wifi_in_public_areas_oneof {
    bool wifi_in_public_areas = 6;
    Exception wifi_in_public_areas_exception = 7;
  }

  // Public internet terminal.
  oneof public_internet_terminal_oneof {
    bool public_internet_terminal = 12;
    Exception public_internet_terminal_exception = 13;
  }
}

message Business {
  // Business center.
  oneof business_center_oneof {
    bool business_center = 2;
    Exception business_center_exception = 3;
  }

  // Meeting rooms.
  oneof meeting_rooms_oneof {
    bool meeting_rooms = 6;
    Exception meeting_rooms_exception = 7;
  }

  // Meeting room count.
  oneof number_of_meeting_rooms_oneof {
    int32 number_of_meeting_rooms = 8;
    Exception number_of_meeting_rooms_exception = 9;
  }
}

message Accessibility {
  // Mobility accessible.
  oneof mobility_accessible_oneof {
    bool mobility_accessible = 4;
    Exception mobility_accessible_exception = 5;
  }

  // Mobility accessible parking.
  oneof mobility_accessible_parking_oneof {
    bool mobility_accessible_parking = 2;
    Exception mobility_accessible_parking_exception = 3;
  }

  // Mobility accessible elevator.
  oneof mobility_accessible_elevator_oneof {
    bool mobility_accessible_elevator = 6;
    Exception mobility_accessible_elevator_exception = 7;
  }

  // Mobility accessible pool.
  oneof mobility_accessible_pool_oneof {
    bool mobility_accessible_pool = 8;
    Exception mobility_accessible_pool_exception = 9;
  }
}

message Pets {
  // Pets allowed.
  oneof pets_allowed_oneof {
    bool pets_allowed = 2;
    Exception pets_allowed_exception = 3;
  }

  // Pets allowed for free.
  oneof pets_allowed_for_free_oneof {
    // No standard fees apply for having an allowed pet in the guest unit.
    bool pets_allowed_for_free = 4;
    Exception pets_allowed_for_free_exception = 5;
  }

  // Dogs allowed.
  oneof dogs_allowed_oneof {
    bool dogs_allowed = 6;
    Exception dogs_allowed_exception = 7;
  }

  // Cats allowed.
  oneof cats_allowed_oneof {
    bool cats_allowed = 8;
    Exception cats_allowed_exception = 9;
  }
}

///////////////////////////////
// Guest Unit level messages //
///////////////////////////////

message GuestUnitType {
  // REQUIRED. Unit or room code identifiers for a single GuestUnitType. Each
  // code must be unique within a Lodging instance.
  repeated string code = 59;

  // REQUIRED. Short name of the GuestUnitType. Target <50 chars for English
  // version.
  string name = 2;

  // Tier.
  oneof tier_oneof {
    // Standard or deluxe.
    // A non-standard tier is only permitted if at least one other unit
    // type is of a lower tier.
    UnitTier tier = 5;
    Exception tier_exception = 6;
  }

  /////////////
  // Occupancy.

  // Max number of occupants.
  oneof max_number_of_occupants_oneof {
    int32 max_number_of_occupants = 7;
    Exception max_number_of_occupants_exception = 8;
  }

  // Max number of adult occupants.
  oneof max_number_of_adult_occupants_oneof {
    int32 max_number_of_adult_occupants = 9;
    Exception max_number_of_adult_occupants_exception = 10;
  }

  // Max number of child occupants.
  oneof max_number_of_child_occupants_oneof {
    int32 max_number_of_child_occupants = 11;
    Exception max_number_of_child_occupants_exception = 12;
  }

  /////////////////////////
  // Guest unit attributes.
  // Where possible features should be defined in GuestUnitFeatures and
  // assigned at the most precise known granularity, e.g. some/all guest
  // units, vs. a specific guest unit type vs. a living area.

  // Private home.
  oneof private_home_oneof {
    bool private_home = 13;
    Exception private_home_exception = 14;
  }

  // Suite with multiple living areas / bedrooms.
  oneof suite_oneof {
    bool suite = 19;
    Exception suite_exception = 20;
  }

  // Bungalow or villa.
  oneof bungalow_or_villa_oneof {
    bool bungalow_or_villa = 21;
    Exception bungalow_or_villa_exception = 22;
  }

  // Access to executive floor lounge or related benefits.
  oneof executive_floor_oneof {
    bool executive_floor = 23;
    Exception executive_floor_exception = 24;
  }

  // Connecting unit available.
  oneof connecting_unit_available_oneof {
    bool connecting_unit_available = 25;
    Exception connecting_unit_available_exception = 26;
  }

  ViewsFromUnit views = 60;

  ////////////////
  // Living areas.

  // Features that cannot be associated with a particular
  // living area but are available in the guest unit type.
  // Prefer to associate with living areas when possible.
  // In general, summable numbers are summarized by taking
  // the max of (the value stored in this field) and
  // (the sum of the values for the individual living areas).
  LivingArea total_living_areas = 100;
}

enum UnitTier {
  // Standard. The basic tier for this kind of unit.
  DEFAULT_STANDARD = 0;

  // Deluxe or Superior. Only allowed if another unit type is a standard tier.
  DELUXE = 1;
}

//////////////////////////////////////////////
// Views available from the guest unit itself.
message ViewsFromUnit {
  // View of beach.
  oneof view_of_beach_oneof {
    bool view_of_beach = 2;
    Exception view_of_beach_exception = 3;
  }

  // View of city.
  oneof view_of_city_oneof {
    bool view_of_city = 4;
    Exception view_of_city_exception = 5;
  }

  // View of garden.
  oneof view_of_garden_oneof {
    bool view_of_garden = 6;
    Exception view_of_garden_exception = 7;
  }

  // View of lake.
  oneof view_of_lake_oneof {
    bool view_of_lake = 8;
    Exception view_of_lake_exception = 9;
  }

  // View of landmark.
  oneof view_of_landmark_oneof {
    bool view_of_landmark = 10;
    Exception view_of_landmark_exception = 11;
  }

  // View of ocean.
  oneof view_of_ocean_oneof {
    bool view_of_ocean = 12;
    Exception view_of_ocean_exception = 13;
  }

  // View of pool.
  oneof view_of_pool_oneof {
    bool view_of_pool = 14;
    Exception view_of_pool_exception = 15;
  }

  // View of valley.
  oneof view_of_valley_oneof {
    bool view_of_valley = 16;
    Exception view_of_valley_exception = 17;
  }
}

// An individual room, such as kitchen, bathroom, bedroom, within
// a bookable guest unit.
message LivingArea {
  LivingAreaLayout layout = 100;

  LivingAreaFeatures features = 101;

  LivingAreaEating eating = 102;

  LivingAreaSleeping sleeping = 103;

  LivingAreaAccessibility accessibility = 104;
}

message LivingAreaLayout {
  // Living area sq meters.
  oneof living_area_sq_meters_oneof {
    float living_area_sq_meters = 2;
    Exception living_area_sq_meters_exception = 3;
  }

  // Stairs inside the LivingArea.
  oneof stairs_oneof {
    bool stairs = 4;
    Exception stairs_exception = 5;
  }

  // Loft.
  oneof loft_oneof {
    bool loft = 6;
    Exception loft_exception = 7;
  }

  // Non smoking.
  oneof non_smoking_oneof {
    bool non_smoking = 12;
    Exception non_smoking_exception = 13;
  }

  // Patio.
  oneof patio_oneof {
    // Has a patio or deck, ground or rooftop.
    bool patio = 16;
    Exception patio_exception = 17;
  }

  // Balcony.
  oneof balcony_oneof {
    // Has a balcony or lanai.
    bool balcony = 18;
    Exception balcony_exception = 19;
  }
}

message LivingAreaFeatures {
  /////////////////////
  // Bathroom features.

  // Private bathroom.
  oneof private_bathroom_oneof {
    // Not shared with other guests.
    bool private_bathroom = 2;
    Exception private_bathroom_exception = 3;
  }

  // Toilet.
  oneof toilet_oneof {
    bool toilet = 4;
    Exception toilet_exception = 5;
  }

  // Bidet.
  oneof bidet_oneof {
    bool bidet = 6;
    Exception bidet_exception = 7;
  }

  // Shower.
  oneof shower_oneof {
    bool shower = 8;
    Exception shower_exception = 9;
  }

  // Bathtub.
  oneof bathtub_oneof {
    bool bathtub = 12;
    Exception bathtub_exception = 13;
  }

  // Hairdryer.
  oneof hairdryer_oneof {
    bool hairdryer = 14;
    Exception hairdryer_exception = 15;
  }

  ///////////////
  // Convenience.

  // Washer.
  oneof washer_oneof {
    bool washer = 64;
    Exception washer_exception = 65;
  }

  // Dryer.
  oneof dryer_oneof {
    bool dryer = 66;
    Exception dryer_exception = 67;
  }

  // Ironing equipment.
  oneof ironing_equipment_oneof {
    bool ironing_equipment = 28;
    Exception ironing_equipment_exception = 29;
  }

  // Universal power adapters.
  oneof universal_power_adapters_oneof {
    bool universal_power_adapters = 30;
    Exception universal_power_adapters_exception = 31;
  }

  ///////////
  // Comfort.

  // Air conditioning.
  oneof air_conditioning_oneof {
    bool air_conditioning = 32;
    Exception air_conditioning_exception = 33;
  }

  // Heating.
  oneof heating_oneof {
    bool heating = 34;
    Exception heating_exception = 35;
  }

  // Fireplace.
  oneof fireplace_oneof {
    bool fireplace = 36;
    Exception fireplace_exception = 37;
  }

  /////////////////
  // Entertainment.

  // TV available.
  oneof tv_oneof {
    bool tv = 38;
    Exception tv_exception = 39;
  }

  // TV with casting.
  oneof tv_with_casting_oneof {
    // Chromecast, Apple TV, etc.
    bool tv_with_casting = 40;
    Exception tv_with_casting_exception = 41;
  }

  // TV with streaming.
  oneof tv_with_streaming_oneof {
    // Built in Netflix, Hulu, etc.
    bool tv_with_streaming = 42;
    Exception tv_with_streaming_exception = 43;
  }

  // Pay per view movies.
  oneof pay_per_view_movies_oneof {
    bool pay_per_view_movies = 44;
    Exception pay_per_view_movies_exception = 45;
  }

  ////////////
  // Security.

  // In unit safe.
  oneof in_unit_safe_oneof {
    bool in_unit_safe = 48;
    Exception in_unit_safe_exception = 49;
  }

  // Electronic room key.
  oneof electronic_room_key_oneof {
    bool electronic_room_key = 50;
    Exception electronic_room_key_exception = 51;
  }

  ///////////////
  // Connectivity

  // In unit Wifi available.
  oneof in_unit_wifi_available_oneof {
    bool in_unit_wifi_available = 62;
    Exception in_unit_wifi_available_exception = 63;
  }
}

message LivingAreaEating {
  // Kitchen available in unit.
  oneof kitchen_available_oneof {
    bool kitchen_available = 2;
    Exception kitchen_available_exception = 3;
  }

  /////////////////////////
  // Major kitchen features.

  // Refrigerator.
  oneof refrigerator_oneof {
    bool refrigerator = 4;
    Exception refrigerator_exception = 5;
  }

  // Dishwasher.
  oneof dishwasher_oneof {
    bool dishwasher = 6;
    Exception dishwasher_exception = 7;
  }

  // Stove.
  oneof stove_oneof {
    bool stove = 8;
    Exception stove_exception = 9;
  }

  // Oven.
  oneof oven_oneof {
    bool oven = 10;
    Exception oven_exception = 11;
  }

  //////////////////////////
  // Minor kitchen features.

  // Cookware.
  oneof cookware_oneof {
    bool cookware = 12;
    Exception cookware_exception = 13;
  }

  // Sink.
  oneof sink_oneof {
    bool sink = 14;
    Exception sink_exception = 15;
  }

  // Microwave.
  oneof microwave_oneof {
    bool microwave = 16;
    Exception microwave_exception = 17;
  }

  // Toaster.
  oneof toaster_oneof {
    bool toaster = 18;
    Exception toaster_exception = 19;
  }

  // Indoor grill.
  oneof indoor_grill_oneof {
    bool indoor_grill = 22;
    Exception indoor_grill_exception = 23;
  }

  // Outdoor grill.
  oneof outdoor_grill_oneof {
    bool outdoor_grill = 24;
    Exception outdoor_grill_exception = 25;
  }

  //////////////////////////////
  // In-unit food and beverages.

  // Minibar.
  oneof minibar_oneof {
    bool minibar = 34;
    Exception minibar_exception = 35;
  }

  // Snackbar.
  oneof snackbar_oneof {
    bool snackbar = 36;
    Exception snackbar_exception = 37;
  }

  // Coffee maker.
  oneof coffee_maker_oneof {
    bool coffee_maker = 42;
    Exception coffee_maker_exception = 43;
  }

  // Kettle.
  oneof kettle_oneof {
    bool kettle = 48;
    Exception kettle_exception = 49;
  }

  // Tea station.
  oneof tea_station_oneof {
    bool tea_station = 50;
    Exception tea_station_exception = 51;
  }
}

message LivingAreaSleeping {
  ////////////////////
  // Bed types counts.

  // Number of beds.
  oneof number_of_beds_oneof {
    int32 number_of_beds = 2;
    Exception number_of_beds_exception = 3;
  }

  // King beds.
  oneof king_beds_oneof {
    // Including California king and super king.
    int32 king_beds = 4;
    Exception king_beds_exception = 5;
  }

  // Queen beds.
  oneof queen_beds_oneof {
    int32 queen_beds = 6;
    Exception queen_beds_exception = 7;
  }

  // Double beds.
  oneof double_beds_oneof {
    int32 double_beds = 8;
    Exception double_beds_exception = 9;
  }

  // Single or twin beds.
  oneof single_or_twin_beds_oneof {
    int32 single_or_twin_beds = 10;
    Exception single_or_twin_beds_exception = 11;
  }

  // Sofa beds.
  oneof sofa_beds_oneof {
    int32 sofa_beds = 14;
    Exception sofa_beds_exception = 15;
  }

  // Bunk beds.
  oneof bunk_beds_oneof {
    int32 bunk_beds = 16;
    Exception bunk_beds_exception = 17;
  }

  // Other beds.
  oneof other_beds_oneof {
    // Tatami, trundle, etc.
    int32 other_beds = 18;
    Exception other_beds_exception = 19;
  }

  // Roll away beds available.
  // This field is deprecated. Please use field roll_away_bed_count for the
  // number of roll away beds. Otherwise, just use field roll_away_beds for the
  // existence of roll away beds.
  oneof roll_away_beds_available_oneof {
    int32 roll_away_beds_available = 20 [deprecated = true];
    Exception roll_away_beds_available_exception = 21 [deprecated = true];
  }

  // Roll away beds.
  oneof roll_away_beds_oneof {
    bool roll_away_beds = 40;
    Exception roll_away_beds_exception = 41;
  }

  // Roll away bed count.
  oneof roll_away_bed_count_oneof {
    int32 roll_away_bed_count = 42;
    Exception roll_away_bed_count_exception = 43;
  }

  // Cribs available.
  // This field is deprecated. Please use field crib_count for the number of
  // cribs. Otherwise, just use field cribs for the existence of cribs.
  oneof cribs_available_oneof {
    int32 cribs_available = 22 [deprecated = true];
    Exception cribs_available_exception = 23 [deprecated = true];
  }

  // Cribs.
  oneof cribs_oneof {
    bool cribs = 44;
    Exception cribs_exception = 45;
  }

  // Crib count.
  oneof crib_count_oneof {
    int32 crib_count = 46;
    Exception crib_count_exception = 47;
  }

  ////////////
  // Sleeping.

  // Hypoallergenic bedding.
  oneof hypoallergenic_bedding_oneof {
    bool hypoallergenic_bedding = 28;
    Exception hypoallergenic_bedding_exception = 29;
  }

  // Synthetic pillows.
  oneof synthetic_pillows_oneof {
    bool synthetic_pillows = 32;
    Exception synthetic_pillows_exception = 33;
  }

  // Memory foam pillows available.
  oneof memory_foam_pillows_oneof {
    bool memory_foam_pillows = 34;
    Exception memory_foam_pillows_exception = 35;
  }

  // Feather pillows available.
  oneof feather_pillows_oneof {
    bool feather_pillows = 36;
    Exception feather_pillows_exception = 37;
  }
}

message LivingAreaAccessibility {
  // Mobility-accessible unit. Generally what "accessible room" refers to in
  // public lodging offerings.
  oneof mobility_accessible_unit_oneof {
    // True if ada_compliant_unit.
    bool mobility_accessible_unit = 2;
    Exception mobility_accessible_unit_exception = 3;
  }

  // ADA standards compliant unit.
  oneof ada_compliant_unit_oneof {
    bool ada_compliant_unit = 4;
    Exception ada_compliant_unit_exception = 5;
  }

  // Hearing-accessible unit.
  oneof hearing_accessible_unit_oneof {
    bool hearing_accessible_unit = 6;
    Exception hearing_accessible_unit_exception = 7;
  }

  ////////////////////////////////
  // Mobility-accessible features.

  // Mobility-accessible shower.
  oneof mobility_accessible_shower_oneof {
    bool mobility_accessible_shower = 10;
    Exception mobility_accessible_shower_exception = 11;
  }

  // Mobility-accessible bathtub.
  oneof mobility_accessible_bathtub_oneof {
    bool mobility_accessible_bathtub = 12;
    Exception mobility_accessible_bathtub_exception = 13;
  }

  // Mobility-accessible toilet.
  oneof mobility_accessible_toilet_oneof {
    bool mobility_accessible_toilet = 14;
    Exception mobility_accessible_toilet_exception = 15;
  }

  //////////////////////////////////
  // Hearing-accessible features.

  // Hearing-accessible doorbell.
  oneof hearing_accessible_doorbell_oneof {
    bool hearing_accessible_doorbell = 30;
    Exception hearing_accessible_doorbell_exception = 31;
  }

  // Hearing-accessible fire_alarm.
  oneof hearing_accessible_fire_alarm_oneof {
    bool hearing_accessible_fire_alarm = 32;
    Exception hearing_accessible_fire_alarm_exception = 33;
  }
}

message HealthAndSafety {
  // Website URL containing Health & Safety measures provided by the hotel.
  oneof learn_more_uri_oneof {
    string learn_more_uri = 2;
    Exception learn_more_uri_exception = 3;
  }

  EnhancedCleaning enhanced_cleaning = 5;

  IncreasedFoodSafety increased_food_safety = 6;

  MinimizedContact minimized_contact = 7;

  PersonalProtection personal_protection = 8;

  PhysicalDistancing physical_distancing = 9;

  reserved 4;  // multi-language support for "learn more" URL.
}

message EnhancedCleaning {
  // Enhanced cleaning of common areas.
  oneof common_areas_enhanced_cleaning_oneof {
    bool common_areas_enhanced_cleaning = 2;
    Exception common_areas_enhanced_cleaning_exception = 3;
  }

  // Enhanced cleaning of guest rooms.
  oneof guest_rooms_enhanced_cleaning_oneof {
    bool guest_rooms_enhanced_cleaning = 4;
    Exception guest_rooms_enhanced_cleaning_exception = 5;
  }

  // Commercial-grade disinfectant used to clean the property.
  oneof commercial_grade_disinfectant_cleaning_oneof {
    bool commercial_grade_disinfectant_cleaning = 6;
    Exception commercial_grade_disinfectant_cleaning_exception = 7;
  }

  // Employees trained in COVID-19 cleaning procedures.
  oneof employees_trained_cleaning_procedures_oneof {
    bool employees_trained_cleaning_procedures = 8;
    Exception employees_trained_cleaning_procedures_exception = 9;
  }

  // Employees trained in thorough hand-washing.
  oneof employees_trained_hand_washing_protocols_oneof {
    bool employees_trained_hand_washing_protocols = 10;
    Exception employees_trained_hand_washing_protocols_exception = 11;
  }

  // Employees wear masks, face shields, and/or gloves.
  oneof employees_wear_protective_equipment_oneof {
    bool employees_wear_protective_equipment = 12;
    Exception employees_wear_protective_equipment_exception = 13;
  }
}

message IncreasedFoodSafety {
  // Additional safety measures during food prep and serving.
  oneof food_preparation_and_serving_safe_handling_oneof {
    bool food_preparation_and_serving_safe_handling = 2;
    Exception food_preparation_and_serving_safe_handling_exception = 3;
  }

  // Additional sanitation in dining areas.
  oneof food_areas_additional_sanitation_oneof {
    bool food_areas_additional_sanitation = 4;
    Exception food_areas_additional_sanitation_exception = 5;
  }

  // Individually-packaged meals.
  oneof individual_packaged_meals_available_oneof {
    bool individual_packaged_meals_available = 6;
    Exception individual_packaged_meals_available_exception = 7;
  }

  // Disposable flatware.
  oneof disposable_flatware_oneof {
    bool disposable_flatware = 8;
    Exception disposable_flatware_exception = 9;
  }

  // Single-use menus.
  oneof single_use_food_menus_oneof {
    bool single_use_food_menus = 10;
    Exception single_use_food_menus_exception = 11;
  }
}

message MinimizedContact {
  // High-touch items, such as magazines, removed from common areas.
  oneof no_high_touch_items_common_areas_oneof {
    bool no_high_touch_items_common_areas = 2;
    Exception no_high_touch_items_common_areas_exception = 3;
  }

  // High-touch items, such as decorative pillows, removed from guest rooms.
  oneof no_high_touch_items_guest_rooms_oneof {
    bool no_high_touch_items_guest_rooms = 4;
    Exception no_high_touch_items_guest_rooms_exception = 5;
  }

  // Keyless mobile entry to guest rooms.
  oneof digital_guest_room_keys_oneof {
    bool digital_guest_room_keys = 6;
    Exception digital_guest_room_keys_exception = 7;
  }

  // Plastic key cards are disinfected or discarded.
  oneof plastic_keycards_disinfected_oneof {
    bool plastic_keycards_disinfected = 8;
    Exception plastic_keycards_disinfected_exception = 9;
  }

  // Buffer maintained between room bookings.
  oneof room_bookings_buffer_oneof {
    bool room_bookings_buffer = 10;
    Exception room_bookings_buffer_exception = 11;
  }

  // Housekeeping scheduled by request only.
  oneof housekeeping_scheduled_request_only_oneof {
    bool housekeeping_scheduled_request_only = 12;
    Exception housekeeping_scheduled_request_only_exception = 13;
  }

  // No-contact check-in and check-out.
  oneof contactless_checkin_checkout_oneof {
    bool contactless_checkin_checkout = 14;
    Exception contactless_checkin_checkout_exception = 15;
  }
}

message PersonalProtection {
  // Hand-sanitizer and/or sanitizing wipes in common areas.
  oneof common_areas_offer_sanitizing_items_oneof {
    bool common_areas_offer_sanitizing_items = 2;
    Exception common_areas_offer_sanitizing_items_exception = 3;
  }

  // In-room hygiene kits with masks, hand sanitizer, and/or antibacterial
  // wipes.
  oneof guest_room_hygiene_kits_available_oneof {
    bool guest_room_hygiene_kits_available = 4;
    Exception guest_room_hygiene_kits_available_exception = 5;
  }

  // Masks and/or gloves available for guests.
  oneof protective_equipment_available_oneof {
    bool protective_equipment_available = 6;
    Exception protective_equipment_available_exception = 7;
  }

  // Masks required on the property.
  oneof face_mask_required_oneof {
    bool face_mask_required = 8;
    Exception face_mask_required_exception = 9;
  }
}

message PhysicalDistancing {
  // Physical distancing required.
  oneof physical_distancing_required_oneof {
    bool physical_distancing_required = 2;
    Exception physical_distancing_required_exception = 3;
  }

  // Safety dividers at front desk and other locations.
  oneof plexiglass_used_oneof {
    bool plexiglass_used = 4;
    Exception plexiglass_used_exception = 5;
  }

  // Guest occupancy limited within shared facilities.
  oneof shared_areas_limited_occupancy_oneof {
    bool shared_areas_limited_occupancy = 6;
    Exception shared_areas_limited_occupancy_exception = 7;
  }

  // Private spaces designated in spa and wellness areas.
  oneof wellness_areas_have_private_spaces_oneof {
    bool wellness_areas_have_private_spaces = 8;
    Exception wellness_areas_have_private_spaces_exception = 9;
  }

  // Common areas arranged to maintain physical distancing.
  oneof common_areas_physical_distancing_arranged_oneof {
    bool common_areas_physical_distancing_arranged = 10;
    Exception common_areas_physical_distancing_arranged_exception = 11;
  }
}

message Sustainability {
  // Website URL containing sustainability information for the hotel.
  oneof sustainability_uri_oneof {
    string sustainability_uri = 2;
    Exception sustainability_uri_exception = 3;
  }

  EnergyEfficiency energy_efficiency = 5;

  WaterConservation water_conservation = 6;

  WasteReduction waste_reduction = 7;

  SustainableSourcing sustainable_sourcing = 8;

  SustainabilityCertifications sustainability_certifications = 9;

  reserved 4;  // multi-language support for sustainability_uri.
}

message EnergyEfficiency {
  // Energy conservation program.
  oneof energy_conservation_program_oneof {
    bool energy_conservation_program = 4;
    Exception energy_conservation_program_exception = 5;
  }

  // Energy use audited by an independent organization.
  oneof independent_organization_audits_energy_use_oneof {
    bool independent_organization_audits_energy_use = 6;
    Exception independent_organization_audits_energy_use_exception = 7;
  }

  // Energy from carbon-free sources.
  oneof carbon_free_energy_sources_oneof {
    bool carbon_free_energy_sources = 8;
    Exception carbon_free_energy_sources_exception = 9;
  }

  // Energy-efficient heating and cooling systems.
  oneof energy_efficient_heating_and_cooling_systems_oneof {
    bool energy_efficient_heating_and_cooling_systems = 10;
    Exception energy_efficient_heating_and_cooling_systems_exception = 11;
  }

  // Energy-efficient lighting.
  oneof energy_efficient_lighting_oneof {
    bool energy_efficient_lighting = 12;
    Exception energy_efficient_lighting_exception = 13;
  }

  // Energy-saving thermostats.
  oneof energy_saving_thermostats_oneof {
    bool energy_saving_thermostats = 14;
    Exception energy_saving_thermostats_exception = 15;
  }
}

message WaterConservation {
  // Water use audited by an independent organization.
  oneof independent_organization_audits_water_use_oneof {
    bool independent_organization_audits_water_use = 2;
    Exception independent_organization_audits_water_use_exception = 3;
  }

  // Water-efficient faucets.
  oneof water_saving_sinks_oneof {
    bool water_saving_sinks = 4;
    Exception water_saving_sinks_exception = 5;
  }

  // Water-efficient toilets.
  oneof water_saving_toilets_oneof {
    bool water_saving_toilets = 6;
    Exception water_saving_toilets_exception = 7;
  }

  // Water-efficient showers.
  oneof water_saving_showers_oneof {
    bool water_saving_showers = 8;
    Exception water_saving_showers_exception = 9;
  }

  // Towel reuse program.
  oneof towel_reuse_program_oneof {
    bool towel_reuse_program = 10;
    Exception towel_reuse_program_exception = 11;
  }

  // Linen reuse program.
  oneof linen_reuse_program_oneof {
    bool linen_reuse_program = 12;
    Exception linen_reuse_program_exception = 13;
  }
}

message WasteReduction {
  // Recycling program.
  oneof recycling_program_oneof {
    bool recycling_program = 2;
    Exception recycling_program_exception = 3;
  }

  // Food waste reduction program.
  oneof food_waste_reduction_program_oneof {
    bool food_waste_reduction_program = 4;
    Exception food_waste_reduction_program_exception = 5;
  }

  // Donates excess food.
  oneof donates_excess_food_oneof {
    bool donates_excess_food = 6;
    Exception donates_excess_food_exception = 7;
  }

  // Composts excess food.
  oneof composts_excess_food_oneof {
    bool composts_excess_food = 8;
    Exception composts_excess_food_exception = 9;
  }

  // Soap donation program.
  oneof soap_donation_program_oneof {
    bool soap_donation_program = 10;
    Exception soap_donation_program_exception = 11;
  }

  // Toiletry donation program.
  oneof toiletry_donation_program_oneof {
    bool toiletry_donation_program = 12;
    Exception toiletry_donation_program_exception = 13;
  }

  // Safely handles hazardous substances.
  oneof safely_handles_hazardous_substances_oneof {
    bool safely_handles_hazardous_substances = 14;
    Exception safely_handles_hazardous_substances_exception = 15;
  }

  // Safely disposes of electronics.
  oneof safely_disposes_electronics_oneof {
    bool safely_disposes_electronics = 16;
    Exception safely_disposes_electronics_exception = 17;
  }

  // Safely disposes of batteries.
  oneof safely_disposes_batteries_oneof {
    bool safely_disposes_batteries = 18;
    Exception safely_disposes_batteries_exception = 19;
  }

  // Safely disposes of lightbulbs.
  oneof safely_disposes_lightbulbs_oneof {
    bool safely_disposes_lightbulbs = 20;
    Exception safely_disposes_lightbulbs_exception = 21;
  }

  // Refillable toiletry containers.
  oneof refillable_toiletry_containers_oneof {
    bool refillable_toiletry_containers = 22;
    Exception refillable_toiletry_containers_exception = 23;
  }

  // Water bottle filling stations.
  oneof water_bottle_filling_stations_oneof {
    bool water_bottle_filling_stations = 24;
    Exception water_bottle_filling_stations_exception = 25;
  }

  // Compostable food containers and cutlery.
  oneof compostable_food_containers_and_cutlery_oneof {
    bool compostable_food_containers_and_cutlery = 26;
    Exception compostable_food_containers_and_cutlery_exception = 27;
  }

  // No Styrofoam food containers.
  oneof no_styrofoam_food_containers_oneof {
    bool no_styrofoam_food_containers = 28;
    Exception no_styrofoam_food_containers_exception = 29;
  }

  // No single-use plastic water bottles.
  oneof no_single_use_plastic_water_bottles_oneof {
    bool no_single_use_plastic_water_bottles = 30;
    Exception no_single_use_plastic_water_bottles_exception = 31;
  }

  // No single-use plastic straws.
  oneof no_single_use_plastic_straws_oneof {
    bool no_single_use_plastic_straws = 32;
    Exception no_single_use_plastic_straws_exception = 33;
  }
}

message SustainableSourcing {
  // Responsible purchasing policy.
  oneof responsible_purchasing_policy_oneof {
    bool responsible_purchasing_policy = 2;
    Exception responsible_purchasing_policy_exception = 3;
  }

  // Organic food and beverages.
  oneof organic_food_and_beverages_oneof {
    bool organic_food_and_beverages = 4;
    Exception organic_food_and_beverages_exception = 5;
  }

  // Locally sourced food and beverages.
  oneof locally_sourced_food_and_beverages_oneof {
    bool locally_sourced_food_and_beverages = 6;
    Exception locally_sourced_food_and_beverages_exception = 7;
  }

  // Responsibly sourced seafood.
  oneof responsibly_sources_seafood_oneof {
    bool responsibly_sources_seafood = 8;
    Exception responsibly_sources_seafood_exception = 9;
  }

  // Organic cage-free eggs.
  oneof organic_cage_free_eggs_oneof {
    bool organic_cage_free_eggs = 10;
    Exception organic_cage_free_eggs_exception = 11;
  }

  // Vegetarian meals.
  oneof vegetarian_meals_oneof {
    bool vegetarian_meals = 12;
    Exception vegetarian_meals_exception = 13;
  }

  // Vegan meals.
  oneof vegan_meals_oneof {
    bool vegan_meals = 14;
    Exception vegan_meals_exception = 15;
  }

  // Eco-friendly toiletries.
  oneof eco_friendly_toiletries_oneof {
    bool eco_friendly_toiletries = 16;
    Exception eco_friendly_toiletries_exception = 17;
  }
}

message SustainabilityCertifications {
  // BREEAM: Pass.
  oneof breeam_pass_oneof {
    bool breeam_pass = 2;
    Exception breeam_pass_exception = 3;
  }

  // BREEAM: Good.
  oneof breeam_good_oneof {
    bool breeam_good = 4;
    Exception breeam_good_exception = 5;
  }

  // BREEAM: Very Good.
  oneof breeam_very_good_oneof {
    bool breeam_very_good = 6;
    Exception breeam_very_good_exception = 7;
  }

  // BREEAM: Excellent.
  oneof breeam_excellent_oneof {
    bool breeam_excellent = 8;
    Exception breeam_excellent_exception = 9;
  }

  // BREEAM: Outstanding.
  oneof breeam_outstanding_oneof {
    bool breeam_outstanding = 10;
    Exception breeam_outstanding_exception = 11;
  }

  // LEED: Certified.
  oneof leed_certified_oneof {
    bool leed_certified = 12;
    Exception leed_certified_exception = 13;
  }

  // LEED: Silver.
  oneof leed_silver_oneof {
    bool leed_silver = 14;
    Exception leed_silver_exception = 15;
  }

  // LEED: Gold.
  oneof leed_gold_oneof {
    bool leed_gold = 16;
    Exception leed_gold_exception = 17;
  }

  // LEED: Platinum.
  oneof leed_platinum_oneof {
    bool leed_platinum = 18;
    Exception leed_platinum_exception = 19;
  }

  // ISO 14001.
  oneof iso14001_oneof {
    bool iso14001 = 20;
    Exception iso14001_exception = 21;
  }

  // ISO 50001.
  oneof iso50001_oneof {
    bool iso50001 = 22;
    Exception iso50001_exception = 23;
  }

  // Asian Ecotourism Standard for Accommodations (AESA).
  oneof asian_ecotourism_oneof {
    bool asian_ecotourism = 24;
    Exception asian_ecotourism_exception = 25;
  }

  // Biosphere Responsible Tourism Standard.
  oneof biosphere_responsible_tourism_oneof {
    bool biosphere_responsible_tourism = 26;
    Exception biosphere_responsible_tourism_exception = 27;
  }

  // Bureau Veritas.
  oneof bureau_veritas_oneof {
    bool bureau_veritas = 28;
    Exception bureau_veritas_exception = 29;
  }

  // Control Union.
  oneof control_union_oneof {
    bool control_union = 30;
    Exception control_union_exception = 31;
  }

  // EarthCheck.
  oneof earthcheck_oneof {
    bool earthcheck = 32;
    Exception earthcheck_exception = 33;
  }

  // Eco-Certification Malta Standard.
  oneof eco_certification_malta_oneof {
    bool eco_certification_malta = 34;
    Exception eco_certification_malta_exception = 35;
  }

  // Ecotourism Australia’s ECO Certification Standard.
  oneof ecotourism_australias_eco_oneof {
    bool ecotourism_australias_eco = 36;
    Exception ecotourism_australias_eco_exception = 37;
  }

  // GREAT Green Deal Certification.
  oneof great_green_deal_oneof {
    bool great_green_deal = 38;
    Exception great_green_deal_exception = 39;
  }

  // Green Globe.
  oneof green_globe_oneof {
    bool green_globe = 40;
    Exception green_globe_exception = 41;
  }

  // Green Growth 2050 Standard.
  oneof green_growth2050_oneof {
    bool green_growth2050 = 42;
    Exception green_growth2050_exception = 43;
  }

  // Green Key.
  oneof green_key_oneof {
    bool green_key = 44;
    Exception green_key_exception = 45;
  }

  // Geen Key Eco Rating.
  oneof green_key_eco_rating_oneof {
    bool green_key_eco_rating = 76;
    Exception green_key_eco_rating_exception = 77;
  }

  // Green Seal.
  oneof green_seal_oneof {
    bool green_seal = 46;
    Exception green_seal_exception = 47;
  }

  // Green Star Hotel Standard.
  oneof green_star_oneof {
    bool green_star = 48;
    Exception green_star_exception = 49;
  }

  // Green Tourism Active Standard.
  oneof green_tourism_active_oneof {
    bool green_tourism_active = 50;
    Exception green_tourism_active_exception = 51;
  }

  // Hilton LightStay.
  oneof hilton_lightstay_oneof {
    bool hilton_lightstay = 52;
    Exception hilton_lightstay_exception = 53;
  }

  // Hostelling International’s Quality and Sustainability Standard.
  oneof hostelling_internationals_quality_and_sustainability_oneof {
    bool hostelling_internationals_quality_and_sustainability = 54;
    Exception hostelling_internationals_quality_and_sustainability_exception =
        55;
  }

  // Hoteles más Verdes (AHT) Standard.
  oneof hoteles_mas_verdes_oneof {
    bool hoteles_mas_verdes = 56;
    Exception hoteles_mas_verdes_exception = 57;
  }

  // Nordic Swan Ecolabel.
  oneof nordic_swan_ecolabel_oneof {
    bool nordic_swan_ecolabel = 70;
    Exception nordic_swan_ecolabel_exception = 71;
  }

  // Preferred by Nature Sustainable Tourism Standard for Accommodation.
  oneof preferred_by_nature_sustainable_tourism_oneof {
    bool preferred_by_nature_sustainable_tourism = 58;
    Exception preferred_by_nature_sustainable_tourism_exception = 59;
  }

  // Sustainable Travel Ireland – GSTC Industry Criteria.
  oneof sustainable_travel_ireland_oneof {
    bool sustainable_travel_ireland = 60;
    Exception sustainable_travel_ireland_exception = 61;
  }

  // TOFTigers Initiative’s Pug Standard.
  oneof tof_tigers_initiatives_pug_oneof {
    bool tof_tigers_initiatives_pug = 62;
    Exception tof_tigers_initiatives_pug_exception = 63;
  }

  // Travelife Standard for Hotels & Accommodations.
  oneof travelife_oneof {
    bool travelife = 64;
    Exception travelife_exception = 65;
  }

  // United Certification Systems Limited.
  oneof united_certification_systems_limited_oneof {
    bool united_certification_systems_limited = 66;
    Exception united_certification_systems_limited_exception = 67;
  }

  // Vireo Srl.
  oneof vireo_srl_oneof {
    bool vireo_srl = 68;
    Exception vireo_srl_exception = 69;
  }
}

// Exception mode. Only use this if the factual information cannot be
// represented by the relevant proto field. i.e. a service is only available
// during some days of the week, or an amenity is only available seasonally.
enum Exception { UNSPECIFIED_REASON = 0; }

message Metadata {
  // REQUIRED.
  // The ISO 8601 datetime at which the Lodging data is asserted to be
  // true in the real world. Examples:
  // 2018-11-13T13:14:52-0800
  // 2018-11-13T13:14:52Z
  string last_updated = 1;
}