#pragma once #include <yt/yt/library/tvm/tvm_base.h> #include <library/cpp/yt/memory/intrusive_ptr.h> namespace NYT::NAuth { //////////////////////////////////////////////////////////////////////////////// /// This wrapper is required because NYT::NAuth::IServiceTicketAuthPtr is NYT::TIntrusivePtr, /// and, if we used this pointer in interfaces of `mapreduce/yt` client, a lot of users of this library /// could get unexpected build errors that `TIntrusivePtr` is ambiguous /// (from `::` namespace and from `::NYT::` namespace). /// So we use this wrapper in our interfaces to avoid such problems for users. struct IServiceTicketAuthPtrWrapper { // /// Construct wrapper from NYT::TIntrusivePtr /// /// This constructor is implicit so users can transparently pass NYT::TIntrusivePtr to the functions of /// mapreduce/yt client. template <class T, class = typename std::enable_if_t<std::is_convertible_v<T*, IServiceTicketAuth*>>> IServiceTicketAuthPtrWrapper(const TIntrusivePtr<T> ptr) : Ptr(ptr) { } /// Wrapped pointer NYT::TIntrusivePtr<IServiceTicketAuth> Ptr; }; //////////////////////////////////////////////////////////////////////////////// } // namespace NYT::NAuth