#pragma once #include "partners_api/booking_availability_params.hpp" #include "map/booking_filter.hpp" #include "map/booking_filter_cache.hpp" #include "map/booking_filter_params.hpp" #include namespace search { class Results; } namespace booking { namespace filter { class AvailabilityFilter : public FilterBase { public: explicit AvailabilityFilter(Delegate const & d); void ApplyFilter(search::Results const & results, ParamsInternal const & filterParams) override; void ApplyFilter(std::vector const & featureIds, ParamsRawInternal const & params) override; void GetFeaturesFromCache(search::Results const & results, std::vector & sortedResults) override; void UpdateParams(ParamsBase const & apiParams) override; private: template void ApplyFilterInternal(Source const & results, Parameters const & filterParams); using CachePtr = std::shared_ptr; CachePtr m_cache = std::make_shared(); AvailabilityParams m_apiParams; }; } // namespace filter } // namespace booking