diff options
author | Sergey Polovko <sergey@polovko.me> | 2022-02-10 16:47:03 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:47:03 +0300 |
commit | 2e714b5ebd40a1f4cc31c27f1ad6e49ca6d895f5 (patch) | |
tree | b83306b6e37edeea782e9eed673d89286c4fef35 /library/cpp/grpc/server/grpc_response.h | |
parent | 3e0b762a82514bac89c1dd6ea7211e381d8aa248 (diff) | |
download | ydb-2e714b5ebd40a1f4cc31c27f1ad6e49ca6d895f5.tar.gz |
Restoring authorship annotation for Sergey Polovko <sergey@polovko.me>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/grpc/server/grpc_response.h')
-rw-r--r-- | library/cpp/grpc/server/grpc_response.h | 178 |
1 files changed, 89 insertions, 89 deletions
diff --git a/library/cpp/grpc/server/grpc_response.h b/library/cpp/grpc/server/grpc_response.h index 47b22c28d0..8e9afe44d5 100644 --- a/library/cpp/grpc/server/grpc_response.h +++ b/library/cpp/grpc/server/grpc_response.h @@ -1,90 +1,90 @@ -#pragma once - -#include <grpc++/impl/codegen/byte_buffer.h> -#include <grpc++/impl/codegen/proto_utils.h> - -#include <variant> - -namespace NGrpc { - -/** - * Universal response that owns underlying message or buffer. - */ -template <typename TMsg> +#pragma once + +#include <grpc++/impl/codegen/byte_buffer.h> +#include <grpc++/impl/codegen/proto_utils.h> + +#include <variant> + +namespace NGrpc { + +/** + * Universal response that owns underlying message or buffer. + */ +template <typename TMsg> class TUniversalResponse: public TAtomicRefCount<TUniversalResponse<TMsg>>, public TMoveOnly { - friend class grpc::SerializationTraits<TUniversalResponse<TMsg>>; - -public: - explicit TUniversalResponse(NProtoBuf::Message* msg) noexcept - : Data_{TMsg{}} - { - std::get<TMsg>(Data_).Swap(static_cast<TMsg*>(msg)); - } - - explicit TUniversalResponse(grpc::ByteBuffer* buffer) noexcept - : Data_{grpc::ByteBuffer{}} - { - std::get<grpc::ByteBuffer>(Data_).Swap(buffer); - } - -private: - std::variant<TMsg, grpc::ByteBuffer> Data_; -}; - -/** - * Universal response that only keeps reference to underlying message or buffer. - */ -template <typename TMsg> -class TUniversalResponseRef: private TMoveOnly { - friend class grpc::SerializationTraits<TUniversalResponseRef<TMsg>>; - -public: - explicit TUniversalResponseRef(const NProtoBuf::Message* msg) - : Data_{msg} - { - } - - explicit TUniversalResponseRef(const grpc::ByteBuffer* buffer) - : Data_{buffer} - { - } - -private: - std::variant<const NProtoBuf::Message*, const grpc::ByteBuffer*> Data_; -}; - -} // namespace NGrpc - -namespace grpc { - -template <typename TMsg> -class SerializationTraits<NGrpc::TUniversalResponse<TMsg>> { -public: - static Status Serialize( - const NGrpc::TUniversalResponse<TMsg>& resp, - ByteBuffer* buffer, - bool* ownBuffer) - { - return std::visit([&](const auto& data) { - using T = std::decay_t<decltype(data)>; - return SerializationTraits<T>::Serialize(data, buffer, ownBuffer); - }, resp.Data_); - } -}; - -template <typename TMsg> -class SerializationTraits<NGrpc::TUniversalResponseRef<TMsg>> { -public: - static Status Serialize( - const NGrpc::TUniversalResponseRef<TMsg>& resp, - ByteBuffer* buffer, - bool* ownBuffer) - { - return std::visit([&](const auto* data) { - using T = std::decay_t<std::remove_pointer_t<decltype(data)>>; - return SerializationTraits<T>::Serialize(*data, buffer, ownBuffer); - }, resp.Data_); - } -}; - -} // namespace grpc + friend class grpc::SerializationTraits<TUniversalResponse<TMsg>>; + +public: + explicit TUniversalResponse(NProtoBuf::Message* msg) noexcept + : Data_{TMsg{}} + { + std::get<TMsg>(Data_).Swap(static_cast<TMsg*>(msg)); + } + + explicit TUniversalResponse(grpc::ByteBuffer* buffer) noexcept + : Data_{grpc::ByteBuffer{}} + { + std::get<grpc::ByteBuffer>(Data_).Swap(buffer); + } + +private: + std::variant<TMsg, grpc::ByteBuffer> Data_; +}; + +/** + * Universal response that only keeps reference to underlying message or buffer. + */ +template <typename TMsg> +class TUniversalResponseRef: private TMoveOnly { + friend class grpc::SerializationTraits<TUniversalResponseRef<TMsg>>; + +public: + explicit TUniversalResponseRef(const NProtoBuf::Message* msg) + : Data_{msg} + { + } + + explicit TUniversalResponseRef(const grpc::ByteBuffer* buffer) + : Data_{buffer} + { + } + +private: + std::variant<const NProtoBuf::Message*, const grpc::ByteBuffer*> Data_; +}; + +} // namespace NGrpc + +namespace grpc { + +template <typename TMsg> +class SerializationTraits<NGrpc::TUniversalResponse<TMsg>> { +public: + static Status Serialize( + const NGrpc::TUniversalResponse<TMsg>& resp, + ByteBuffer* buffer, + bool* ownBuffer) + { + return std::visit([&](const auto& data) { + using T = std::decay_t<decltype(data)>; + return SerializationTraits<T>::Serialize(data, buffer, ownBuffer); + }, resp.Data_); + } +}; + +template <typename TMsg> +class SerializationTraits<NGrpc::TUniversalResponseRef<TMsg>> { +public: + static Status Serialize( + const NGrpc::TUniversalResponseRef<TMsg>& resp, + ByteBuffer* buffer, + bool* ownBuffer) + { + return std::visit([&](const auto* data) { + using T = std::decay_t<std::remove_pointer_t<decltype(data)>>; + return SerializationTraits<T>::Serialize(*data, buffer, ownBuffer); + }, resp.Data_); + } +}; + +} // namespace grpc |