blob: e1134e3c6e14efb2694032a74ee3bbbb0926c81b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#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
|