[booking] block availability endpoint is fixed ("room" parameter is requred now).

This commit is contained in:
Arsentiy Milchakov 2020-07-30 10:50:03 +03:00 committed by Anatoliy V. Tomilov
parent e3d63663a9
commit 92f9290839
15 changed files with 217 additions and 143 deletions

View file

@ -527,25 +527,27 @@ public:
if (!m_initialized || bookingFilterParams == nullptr)
return result;
auto & orderingParams = result.m_orderingParams;
jlong const jcheckin = env->GetLongField(bookingFilterParams, m_checkinMillisecId) / 1000;
result.m_checkin =
booking::AvailabilityParams::Clock::from_time_t(static_cast<time_t>(jcheckin));
orderingParams.m_checkin =
booking::OrderingParams::Clock::from_time_t(static_cast<time_t>(jcheckin));
jlong const jcheckout = env->GetLongField(bookingFilterParams, m_checkoutMillisecId) / 1000;
result.m_checkout =
booking::AvailabilityParams::Clock::from_time_t(static_cast<time_t>(jcheckout));
orderingParams.m_checkout =
booking::OrderingParams::Clock::from_time_t(static_cast<time_t>(jcheckout));
jobjectArray const jrooms =
static_cast<jobjectArray>(env->GetObjectField(bookingFilterParams, m_roomsId));
ASSERT(jrooms, ("Rooms must be non-null!"));
auto const length = static_cast<size_t>(env->GetArrayLength(jrooms));
result.m_rooms.resize(length);
orderingParams.m_rooms.resize(length);
for (size_t i = 0; i < length; ++i)
{
jobject jroom = env->GetObjectArrayElement(jrooms, static_cast<jsize>(i));
booking::AvailabilityParams::Room room;
booking::OrderingParams::Room room;
room.SetAdultsCount(static_cast<uint8_t>(env->GetIntField(jroom, m_roomAdultsCountId)));
auto const childrenObject = env->GetObjectField(jroom, m_roomAgeOfChildrenId);
@ -564,7 +566,7 @@ public:
room.SetAgeOfChildren(ageOfChildren);
}
result.m_rooms[i] = move(room);
orderingParams.m_rooms[i] = move(room);
}
return result;
}

View file

@ -122,7 +122,7 @@ unsigned makeMask(std::unordered_set<ftypes::IsHotelChecker::Type> const &items)
}
- (booking::filter::Params)availabilityParams {
using Clock = booking::AvailabilityParams::Clock;
using Clock = booking::OrderingParams::Clock;
booking::AvailabilityParams params;
if (Platform::IsConnected())
{
@ -148,16 +148,17 @@ unsigned makeMask(std::unordered_set<ftypes::IsHotelChecker::Type> const &items)
i += 1;
}
std::vector<booking::AvailabilityParams::Room> filterRooms;
std::vector<booking::OrderingParams::Room> filterRooms;
for (Room *room : rooms) {
std::vector<int8_t> agesOfChildren(room.children, kAgeOfChild);
agesOfChildren.insert(agesOfChildren.end(), room.infants, kAgeOfInfant);
filterRooms.emplace_back(room.adults, agesOfChildren);
}
params.m_rooms = filterRooms;
params.m_checkin = Clock::from_time_t(self.checkInDate.timeIntervalSince1970);
params.m_checkout = Clock::from_time_t(self.checkOutDate.timeIntervalSince1970);
auto &orderingParams = params.m_orderingParams;
orderingParams.m_rooms = filterRooms;
orderingParams.m_checkin = Clock::from_time_t(self.checkInDate.timeIntervalSince1970);
orderingParams.m_checkout = Clock::from_time_t(self.checkOutDate.timeIntervalSince1970);
}
return {std::make_shared<booking::AvailabilityParams>(params), {}};
}

View file

@ -4288,7 +4288,7 @@ void Framework::OnBookingFilterParamsUpdate(booking::filter::Tasks const & filte
}
}
booking::AvailabilityParams Framework::GetLastBookingAvailabilityParams() const
booking::AvailabilityParams const & Framework::GetLastBookingAvailabilityParams() const
{
return m_bookingAvailabilityParams;
}

View file

@ -894,7 +894,7 @@ public:
std::vector<FeatureID> && featureIds) override;
void OnBookingFilterParamsUpdate(booking::filter::Tasks const & filterTasks) override;
booking::AvailabilityParams GetLastBookingAvailabilityParams() const;
booking::AvailabilityParams const & GetLastBookingAvailabilityParams() const;
private:
// m_discoveryManager must be bellow m_searchApi, m_localsApi

View file

@ -35,6 +35,8 @@ set(
booking_availability_params.hpp
booking_block_params.cpp
booking_block_params.hpp
booking_ordering_params.cpp
booking_ordering_params.hpp
booking_params_base.hpp
freenow_api.cpp
freenow_api.hpp

View file

@ -379,8 +379,9 @@ string ApplyAvailabilityParamsDeep(string const & url, AvailabilityParams const
{
auto p = params.Get(kAvailabilityParamsForDeepLink);
auto & orderingParams = params.m_orderingParams;
auto const sum = std::accumulate(
params.m_rooms.cbegin(), params.m_rooms.cend(), 0 /* sum start value */,
orderingParams.m_rooms.cbegin(), orderingParams.m_rooms.cend(), 0 /* sum start value */,
[](auto const s, auto const & room) { return s + room.GetAdultsCount(); });
p.emplace_back("numberOfGuests", std::to_string(sum));

View file

@ -20,86 +20,22 @@ bool IsAcceptedByFilter(booking::AvailabilityParams::UrlFilter const & filter,
namespace booking
{
AvailabilityParams::Room::Room(uint8_t adultsCount, std::vector<int8_t> const & ageOfChildren)
: m_adultsCount(adultsCount), m_ageOfChildren(ageOfChildren)
{
}
void AvailabilityParams::Room::SetAdultsCount(uint8_t adultsCount)
{
m_adultsCount = adultsCount;
}
void AvailabilityParams::Room::SetAgeOfChildren(std::vector<int8_t> const & ageOfChildren)
{
m_ageOfChildren = ageOfChildren;
}
uint8_t AvailabilityParams::Room::GetAdultsCount() const
{
return m_adultsCount;
}
std::vector<int8_t> const & AvailabilityParams::Room::GetAgeOfChildren() const
{
return m_ageOfChildren;
}
std::string AvailabilityParams::Room::ToString() const
{
static std::string const kAdult = "A";
std::vector<std::string> adults(m_adultsCount, kAdult);
std::string children =
m_ageOfChildren.empty() ? "" : "," + strings::JoinAny(m_ageOfChildren, ',', strings::ToStringConverter<int>());
std::ostringstream os;
os << strings::JoinStrings(adults, ',') << children;
return os.str();
}
bool AvailabilityParams::Room::operator!=(AvailabilityParams::Room const & rhs) const
{
return m_adultsCount != rhs.m_adultsCount || m_ageOfChildren != rhs.m_ageOfChildren;
}
bool AvailabilityParams::Room::operator==(AvailabilityParams::Room const & rhs) const
{
return !this->operator!=(rhs);
}
// static
AvailabilityParams AvailabilityParams::MakeDefault()
{
AvailabilityParams result;
// Use tomorrow and day after tomorrow by default.
result.m_checkin = Clock::now();
result.m_checkout = Clock::now() + std::chrono::hours(24);
// Use two adults without children.
result.m_rooms = {{2, {}}};
result.m_orderingParams = OrderingParams::MakeDefault();
return result;
}
url::Params AvailabilityParams::Get(UrlFilter const & filter /* = {} */) const
{
url::Params result;
url::Params result = m_orderingParams.Get();
if (IsAcceptedByFilter(filter, "hotel_ids"))
result.emplace_back("hotel_ids", strings::JoinStrings(m_hotelIds, ','));
if (IsAcceptedByFilter(filter, "checkin"))
result.emplace_back("checkin", FormatTime(m_checkin));
if (IsAcceptedByFilter(filter, "checkout"))
result.emplace_back("checkout", FormatTime(m_checkout));
if (IsAcceptedByFilter(filter, "room"))
{
for (size_t i = 0; i < m_rooms.size(); ++i)
result.emplace_back("room" + std::to_string(i + 1), m_rooms[i].ToString());
}
if (m_minReviewScore != 0.0 && IsAcceptedByFilter(filter, "min_review_score"))
result.emplace_back("min_review_score", std::to_string(m_minReviewScore));
@ -114,7 +50,7 @@ url::Params AvailabilityParams::Get(UrlFilter const & filter /* = {} */) const
bool AvailabilityParams::IsEmpty() const
{
return m_checkin == Time() || m_checkout == Time() || m_rooms.empty();
return m_orderingParams.IsEmpty();
}
bool AvailabilityParams::Equals(ParamsBase const & rhs) const
@ -124,7 +60,7 @@ bool AvailabilityParams::Equals(ParamsBase const & rhs) const
bool AvailabilityParams::Equals(AvailabilityParams const & rhs) const
{
return m_checkin == rhs.m_checkin && m_checkout == rhs.m_checkout && m_rooms == rhs.m_rooms &&
return m_orderingParams.Equals(rhs.m_orderingParams) &&
m_minReviewScore == rhs.m_minReviewScore && m_stars == rhs.m_stars &&
m_dealsOnly == rhs.m_dealsOnly;
}

View file

@ -1,5 +1,6 @@
#pragma once
#include "partners_api/booking_ordering_params.hpp"
#include "partners_api/booking_params_base.hpp"
#include "coding/url.hpp"
@ -15,29 +16,7 @@ namespace booking
/// [m_hotelIds], [m_checkin], [m_checkout], [m_rooms] are required.
struct AvailabilityParams : public ParamsBase
{
struct Room
{
Room() = default;
Room(uint8_t adultsCount, std::vector<int8_t> const & ageOfChildren);
void SetAdultsCount(uint8_t adultsCount);
void SetAgeOfChildren(std::vector<int8_t> const & ageOfChildren);
uint8_t GetAdultsCount() const;
std::vector<int8_t> const & GetAgeOfChildren() const;
std::string ToString() const;
bool operator!=(Room const & rhs) const;
bool operator==(Room const & rhs) const;
private:
uint8_t m_adultsCount = 0;
// No children by default.
std::vector<int8_t> m_ageOfChildren;
};
using Hotels = std::vector<std::string>;
using Rooms = std::vector<Room>;
using Stars = std::vector<std::string>;
static AvailabilityParams MakeDefault();
@ -54,15 +33,10 @@ struct AvailabilityParams : public ParamsBase
/// Limit the result list to the specified hotels where they have availability for the
/// specified guests and dates.
Hotels m_hotelIds;
/// The arrival date. Must be within 360 days in the future and in the format yyyy-mm-dd.
Time m_checkin;
/// The departure date. Must be later than [m_checkin]. Must be between 1 and 30 days after
/// [m_checkin]. Must be within 360 days in the future and in the format yyyy-mm-dd.
Time m_checkout;
/// Each room is comma-separated array of guests to stay in this room where "A" represents an
/// adult and an integer represents a child. eg room1=A,A,4 would be a room with 2 adults and 1
/// four year-old child. Child age numbers are 0..17.
Rooms m_rooms;
// Arrival/deparure dates and rooms.
// For detailed description see booking::OrderingParams declaration.
OrderingParams m_orderingParams;
/// Show only hotels with review_score >= that. min_review_score should be in the range 1 to 10.
/// Values are rounded down: min_review_score 7.8 will result in properties with review scores
/// of 7 and up.

View file

@ -10,20 +10,18 @@ namespace booking
BlockParams BlockParams::MakeDefault()
{
BlockParams result;
// Use tomorrow and day after tomorrow by default.
result.m_checkin = Clock::now();
result.m_checkout = Clock::now() + std::chrono::hours(24);
result.m_orderingParams = OrderingParams::MakeDefaultMinPrice();
// Information about sales by default.
result.m_extras = {"deal_smart", "deal_lastm", "photos"};
result.m_extras = {"deal_smart", "deal_lastm"};
return result;
}
url::Params BlockParams::Get() const
{
url::Params params = {{"hotel_ids", m_hotelId},
{"checkin", FormatTime(m_checkin)},
{"checkout", FormatTime(m_checkout)}};
url::Params params = m_orderingParams.Get();
params.emplace_back("hotel_ids", m_hotelId);
if (!m_currency.empty())
params.emplace_back("currency", m_currency);
@ -39,7 +37,7 @@ url::Params BlockParams::Get() const
bool BlockParams::IsEmpty() const
{
return m_checkin == Time() || m_checkout == Time();
return m_orderingParams.IsEmpty();
}
bool BlockParams::Equals(ParamsBase const & rhs) const
@ -49,8 +47,8 @@ bool BlockParams::Equals(ParamsBase const & rhs) const
bool BlockParams::Equals(BlockParams const & rhs) const
{
return m_checkin == rhs.m_checkin && m_checkout == rhs.m_checkout &&
m_currency == rhs.m_currency && m_extras == rhs.m_extras && m_language == rhs.m_language;
return m_orderingParams.Equals(rhs.m_orderingParams) && m_currency == rhs.m_currency &&
m_extras == rhs.m_extras && m_language == rhs.m_language;
}
void BlockParams::Set(ParamsBase const & src)

View file

@ -1,5 +1,6 @@
#pragma once
#include "partners_api/booking_ordering_params.hpp"
#include "partners_api/booking_params_base.hpp"
#include "coding/url.hpp"
@ -24,9 +25,8 @@ struct BlockParams : public ParamsBase
void Set(ParamsBase const & src) override;
std::string m_hotelId;
OrderingParams m_orderingParams;
std::string m_currency;
Time m_checkin;
Time m_checkout;
Extras m_extras;
std::string m_language;
};

View file

@ -0,0 +1,106 @@
#include "partners_api/booking_ordering_params.hpp"
#include "partners_api/utils.hpp"
#include "base/assert.hpp"
#include "base/string_utils.hpp"
namespace booking
{
OrderingParams::Room::Room(uint8_t adultsCount, std::vector<int8_t> const & ageOfChildren)
: m_adultsCount(adultsCount), m_ageOfChildren(ageOfChildren)
{
}
void OrderingParams::Room::SetAdultsCount(uint8_t adultsCount)
{
m_adultsCount = adultsCount;
}
void OrderingParams::Room::SetAgeOfChildren(std::vector<int8_t> const & ageOfChildren)
{
m_ageOfChildren = ageOfChildren;
}
uint8_t OrderingParams::Room::GetAdultsCount() const
{
return m_adultsCount;
}
std::vector<int8_t> const & OrderingParams::Room::GetAgeOfChildren() const
{
return m_ageOfChildren;
}
std::string OrderingParams::Room::ToString() const
{
static std::string const kAdult = "A";
std::vector<std::string> adults(m_adultsCount, kAdult);
std::string children =
m_ageOfChildren.empty() ? "" : "," + strings::JoinAny(m_ageOfChildren, ',', strings::ToStringConverter<int>());
std::ostringstream os;
os << strings::JoinStrings(adults, ',') << children;
return os.str();
}
bool OrderingParams::Room::operator!=(OrderingParams::Room const & rhs) const
{
return m_adultsCount != rhs.m_adultsCount || m_ageOfChildren != rhs.m_ageOfChildren;
}
bool OrderingParams::Room::operator==(OrderingParams::Room const & rhs) const
{
return !this->operator!=(rhs);
}
bool OrderingParams::IsEmpty() const
{
return m_checkin == Time() || m_checkout == Time() || m_rooms.empty();
}
bool OrderingParams::Equals(OrderingParams const & rhs) const
{
return m_checkin == rhs.m_checkin && m_checkout == rhs.m_checkout && m_rooms == rhs.m_rooms;
}
url::Params OrderingParams::Get() const
{
ASSERT(!IsEmpty(), ());
url::Params result;
result.reserve(2 + m_rooms.size());
result.emplace_back("checkin", partners_api::FormatTime(m_checkin, "%Y-%m-%d"));
result.emplace_back("checkout", partners_api::FormatTime(m_checkout, "%Y-%m-%d"));
for (size_t i = 0; i < m_rooms.size(); ++i)
result.emplace_back("room" + std::to_string(i + 1), m_rooms[i].ToString());
return result;
}
// static
OrderingParams OrderingParams::MakeDefault()
{
OrderingParams result;
// Use tomorrow and day after tomorrow by default.
result.m_checkin = Clock::now();
result.m_checkout = Clock::now() + std::chrono::hours(24);
// Use two adults without children.
result.m_rooms = {{2, {}}};
return result;
}
OrderingParams OrderingParams::MakeDefaultMinPrice()
{
OrderingParams result;
// Use tomorrow and day after tomorrow by default.
result.m_checkin = Clock::now();
result.m_checkout = Clock::now() + std::chrono::hours(24);
// Use one adult without children.
result.m_rooms = {{1, {}}};
return result;
}
} // namespace booking

View file

@ -0,0 +1,56 @@
#pragma once
#include "coding/url.hpp"
#include <chrono>
#include <vector>
namespace booking
{
struct OrderingParams
{
struct Room
{
Room() = default;
Room(uint8_t adultsCount, std::vector<int8_t> const & ageOfChildren);
void SetAdultsCount(uint8_t adultsCount);
void SetAgeOfChildren(std::vector<int8_t> const & ageOfChildren);
uint8_t GetAdultsCount() const;
std::vector<int8_t> const & GetAgeOfChildren() const;
std::string ToString() const;
bool operator!=(Room const & rhs) const;
bool operator==(Room const & rhs) const;
private:
uint8_t m_adultsCount = 0;
// No children by default.
std::vector<int8_t> m_ageOfChildren;
};
using Clock = std::chrono::system_clock;
using Time = Clock::time_point;
using Rooms = std::vector<Room>;
bool IsEmpty() const;
bool Equals(OrderingParams const & rhs) const;
url::Params Get() const;
static OrderingParams MakeDefault();
static OrderingParams MakeDefaultMinPrice();
/// The arrival date. Must be within 360 days in the future and in the format yyyy-mm-dd.
Time m_checkin;
/// The departure date. Must be later than [m_checkin]. Must be between 1 and 30 days after
/// [m_checkin]. Must be within 360 days in the future and in the format yyyy-mm-dd.
Time m_checkout;
/// Each room is comma-separated array of guests to stay in this room where "A" represents an
/// adult and an integer represents a child. eg room1=A,A,4 would be a room with 2 adults and 1
/// four year-old child. Child age numbers are 0..17.
Rooms m_rooms;
};
} // namespace booking

View file

@ -1,8 +1,6 @@
#pragma once
#include "partners_api/utils.hpp"
#include "base/macros.hpp"
#include "base/assert.hpp"
#include <exception>
@ -13,14 +11,6 @@ struct BlockParams;
struct ParamsBase
{
using Clock = std::chrono::system_clock;
using Time = Clock::time_point;
static std::string FormatTime(Time p)
{
return partners_api::FormatTime(p, "%Y-%m-%d");
}
virtual ~ParamsBase() = default;
virtual bool IsEmpty() const = 0;

View file

@ -39,9 +39,9 @@ UNIT_TEST(Booking_HotelAvailability)
{
AvailabilityParams params;
params.m_hotelIds = {"98251"}; // booking hotel id for testing
params.m_rooms = {{2, {}}};
params.m_checkin = std::chrono::system_clock::now() + std::chrono::hours(24);
params.m_checkout = std::chrono::system_clock::now() + std::chrono::hours(24 * 7);
params.m_orderingParams.m_rooms = {{2, {}}};
params.m_orderingParams.m_checkin = std::chrono::system_clock::now() + std::chrono::hours(24);
params.m_orderingParams.m_checkout = std::chrono::system_clock::now() + std::chrono::hours(24 * 7);
params.m_stars = {"4", "5"};
std::string result;
TEST(RawApi::HotelAvailability(params, result), ());
@ -124,9 +124,9 @@ UNIT_CLASS_TEST(AsyncGuiThreadBooking, GetHotelAvailability)
{
AvailabilityParams params;
params.m_hotelIds = {"0"}; // Internal hotel id for testing.
params.m_rooms = {{2, {}}};
params.m_checkin = std::chrono::system_clock::now() + std::chrono::hours(24);
params.m_checkout = std::chrono::system_clock::now() + std::chrono::hours(24 * 7);
params.m_orderingParams.m_rooms = {{2, {}}};
params.m_orderingParams.m_checkin = std::chrono::system_clock::now() + std::chrono::hours(24);
params.m_orderingParams.m_checkout = std::chrono::system_clock::now() + std::chrono::hours(24 * 7);
params.m_stars = {"4"};
Api api;
HotelsWithExtras result;

View file

@ -74,6 +74,8 @@
3DBD7C2124251C1100ED9FE8 /* skyeng_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DBD7C1B24251C1000ED9FE8 /* skyeng_tests.cpp */; };
3DBD7C2224251C1100ED9FE8 /* bookmark_catalog_ads_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DBD7C1C24251C1100ED9FE8 /* bookmark_catalog_ads_tests.cpp */; };
3DBD7C2324251C1100ED9FE8 /* tinkoff_airlines_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DBD7C1D24251C1100ED9FE8 /* tinkoff_airlines_tests.cpp */; };
3DCAC69424D1CFE800518E8B /* booking_ordering_params.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3DCAC69224D1CFE800518E8B /* booking_ordering_params.hpp */; };
3DCAC69524D1CFE900518E8B /* booking_ordering_params.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DCAC69324D1CFE800518E8B /* booking_ordering_params.cpp */; };
3DCD415320DAB33700143533 /* booking_block_params.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DCD415120DAB33700143533 /* booking_block_params.cpp */; };
3DCD415420DAB33700143533 /* booking_block_params.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3DCD415220DAB33700143533 /* booking_block_params.hpp */; };
3DF01C2D20652463005DDF8C /* taxi_places.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DF01C2A20652462005DDF8C /* taxi_places.cpp */; };
@ -191,6 +193,8 @@
3DBD7C1B24251C1000ED9FE8 /* skyeng_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = skyeng_tests.cpp; sourceTree = "<group>"; };
3DBD7C1C24251C1100ED9FE8 /* bookmark_catalog_ads_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bookmark_catalog_ads_tests.cpp; sourceTree = "<group>"; };
3DBD7C1D24251C1100ED9FE8 /* tinkoff_airlines_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinkoff_airlines_tests.cpp; sourceTree = "<group>"; };
3DCAC69224D1CFE800518E8B /* booking_ordering_params.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = booking_ordering_params.hpp; sourceTree = "<group>"; };
3DCAC69324D1CFE800518E8B /* booking_ordering_params.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = booking_ordering_params.cpp; sourceTree = "<group>"; };
3DCD415120DAB33700143533 /* booking_block_params.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = booking_block_params.cpp; sourceTree = "<group>"; };
3DCD415220DAB33700143533 /* booking_block_params.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = booking_block_params.hpp; sourceTree = "<group>"; };
3DF01C2A20652462005DDF8C /* taxi_places.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taxi_places.cpp; sourceTree = "<group>"; };
@ -332,6 +336,8 @@
F6B5363B1DA520B20067EEA5 /* partners_api */ = {
isa = PBXGroup;
children = (
3DCAC69324D1CFE800518E8B /* booking_ordering_params.cpp */,
3DCAC69224D1CFE800518E8B /* booking_ordering_params.hpp */,
3D035CA1245195E600C21B57 /* guides_on_map_api.cpp */,
3D035CA0245195E500C21B57 /* guides_on_map_api.hpp */,
3DBD7BE524251BF000ED9FE8 /* ads */,
@ -486,6 +492,7 @@
3D035CA2245195E600C21B57 /* guides_on_map_api.hpp in Headers */,
3DBD7C0424251BF000ED9FE8 /* mopub_ads.hpp in Headers */,
3DBD7C1224251BF000ED9FE8 /* ads_utils.hpp in Headers */,
3DCAC69424D1CFE800518E8B /* booking_ordering_params.hpp in Headers */,
3DBD7C0624251BF000ED9FE8 /* ads_engine.hpp in Headers */,
3DBD7C2024251C1100ED9FE8 /* download_on_map_container_delegate.hpp in Headers */,
3DF01C2E20652463005DDF8C /* taxi_places.hpp in Headers */,
@ -608,6 +615,7 @@
3DCD415320DAB33700143533 /* booking_block_params.cpp in Sources */,
F6B536421DA520E40067EEA5 /* uber_api.cpp in Sources */,
F6539537207FBED70057B97C /* taxi_places_loader.cpp in Sources */,
3DCAC69524D1CFE900518E8B /* booking_ordering_params.cpp in Sources */,
4566605020D91FEE0085E8C1 /* megafon_countries.cpp in Sources */,
3DBD7C1024251BF000ED9FE8 /* ads_engine.cpp in Sources */,
3DFEBF9B1EFBFC1500317D5C /* taxi_engine.cpp in Sources */,