Line data Source code
1 : /**
2 : * Copyright Soramitsu Co., Ltd. All Rights Reserved.
3 : * SPDX-License-Identifier: Apache-2.0
4 : */
5 :
6 : #include "backend/protobuf/query_responses/proto_error_query_response.hpp"
7 : #include "utils/variant_deserializer.hpp"
8 :
9 : namespace shared_model {
10 : namespace proto {
11 :
12 : template <typename QueryResponseType>
13 : ErrorQueryResponse::ErrorQueryResponse(QueryResponseType &&response)
14 146 : : CopyableProto(std::forward<QueryResponseType>(response)),
15 : variant_{[this] {
16 96 : auto &&ar = proto_->error_response();
17 :
18 96 : unsigned which = ar.GetDescriptor()
19 96 : ->FindFieldByName("reason")
20 96 : ->enum_type()
21 96 : ->FindValueByNumber(ar.reason())
22 96 : ->index();
23 96 : return shared_model::detail::
24 : variant_impl<ProtoQueryErrorResponseListType>::template load<
25 : ProtoQueryErrorResponseVariantType>(
26 96 : std::forward<decltype(ar)>(ar), which);
27 0 : }},
28 146 : ivariant_{detail::makeLazyInitializer(
29 : [this] { return QueryErrorResponseVariantType(*variant_); })} {}
30 :
31 : template ErrorQueryResponse::ErrorQueryResponse(
32 : ErrorQueryResponse::TransportType &);
33 : template ErrorQueryResponse::ErrorQueryResponse(
34 : const ErrorQueryResponse::TransportType &);
35 : template ErrorQueryResponse::ErrorQueryResponse(
36 : ErrorQueryResponse::TransportType &&);
37 :
38 : ErrorQueryResponse::ErrorQueryResponse(const ErrorQueryResponse &o)
39 0 : : ErrorQueryResponse(o.proto_) {}
40 :
41 : ErrorQueryResponse::ErrorQueryResponse(ErrorQueryResponse &&o) noexcept
42 146 : : ErrorQueryResponse(std::move(o.proto_)) {}
43 :
44 : const ErrorQueryResponse::QueryErrorResponseVariantType &
45 : ErrorQueryResponse::get() const {
46 96 : return *ivariant_;
47 : }
48 :
49 : const ErrorQueryResponse::ErrorMessageType &
50 : ErrorQueryResponse::errorMessage() const {
51 2 : return proto_->error_response().message();
52 : }
53 :
54 : } // namespace proto
55 : } // namespace shared_model
|