#include "name_service.h" #include namespace NSQLComplete { namespace { class TNameService: public INameService { public: explicit TNameService(TVector names) : Index_(BuildNameIndex(std::move(names), NormalizeName)) { } NThreading::TFuture Lookup(const TNameRequest& request) const override { if (request.Constraints.IsEmpty()) { return NThreading::MakeFuture({}); } TVector filtered = FilteredByPrefix(request.Prefix, Index_, NormalizeName); filtered.crop(request.Limit); return NThreading::MakeFuture({ .RankedNames = Transform(filtered), }); } private: static TVector Transform(TVector names) { TVector generic; generic.reserve(names.size()); for (TStringBuf name : names) { generic.emplace_back(Transform(name)); } return generic; } static TGenericName Transform(TStringBuf name) { TBindingName unknown; unknown.Identifier = name; return unknown; } TNameIndex Index_; }; } // namespace INameService::TPtr MakeBindingNameService(TVector names) { return new TNameService(std::move(names)); } } // namespace NSQLComplete