/tmp/bitcoin/src/ipc/capnp/common-types.h
Line | Count | Source |
1 | | // Copyright (c) 2023-present The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #ifndef BITCOIN_IPC_CAPNP_COMMON_TYPES_H |
6 | | #define BITCOIN_IPC_CAPNP_COMMON_TYPES_H |
7 | | |
8 | | #include <clientversion.h> |
9 | | #include <interfaces/types.h> |
10 | | #include <primitives/transaction.h> |
11 | | #include <serialize.h> |
12 | | #include <streams.h> |
13 | | #include <univalue.h> |
14 | | |
15 | | #include <cstddef> |
16 | | #include <mp/proxy-types.h> |
17 | | #include <mp/type-chrono.h> |
18 | | #include <mp/type-context.h> |
19 | | #include <mp/type-data.h> |
20 | | #include <mp/type-decay.h> |
21 | | #include <mp/type-interface.h> |
22 | | #include <mp/type-message.h> |
23 | | #include <mp/type-number.h> |
24 | | #include <mp/type-optional.h> |
25 | | #include <mp/type-pointer.h> |
26 | | #include <mp/type-string.h> |
27 | | #include <mp/type-struct.h> |
28 | | #include <mp/type-threadmap.h> |
29 | | #include <mp/type-vector.h> |
30 | | #include <type_traits> |
31 | | #include <utility> |
32 | | |
33 | | namespace ipc { |
34 | | namespace capnp { |
35 | | //! Construct a ParamStream wrapping a data stream with serialization parameters |
36 | | //! needed to pass transaction objects between bitcoin processes. |
37 | | //! In the future, more params may be added here to serialize other objects that |
38 | | //! require serialization parameters. Params should just be chosen to serialize |
39 | | //! objects completely and ensure that serializing and deserializing objects |
40 | | //! with the specified parameters produces equivalent objects. It's also |
41 | | //! harmless to specify serialization parameters here that are not used. |
42 | | template <typename S> |
43 | | auto Wrap(S& s) |
44 | 12 | { |
45 | 12 | return ParamsStream{s, TX_WITH_WITNESS}; |
46 | 12 | } auto ipc::capnp::Wrap<DataStream>(DataStream&) Line | Count | Source | 44 | 6 | { | 45 | 6 | return ParamsStream{s, TX_WITH_WITNESS}; | 46 | 6 | } |
auto ipc::capnp::Wrap<SpanReader>(SpanReader&) Line | Count | Source | 44 | 6 | { | 45 | 6 | return ParamsStream{s, TX_WITH_WITNESS}; | 46 | 6 | } |
|
47 | | |
48 | | //! Detect if type has a deserialize_type constructor, which is |
49 | | //! used to deserialize types like CTransaction that can't be unserialized into |
50 | | //! existing objects because they are immutable. |
51 | | template <typename T> |
52 | | concept Deserializable = std::is_constructible_v<T, ::deserialize_type, ::DataStream&>; |
53 | | } // namespace capnp |
54 | | } // namespace ipc |
55 | | |
56 | | //! Functions to serialize / deserialize common bitcoin types. |
57 | | namespace mp { |
58 | | //! Overload multiprocess library's CustomBuildField hook to allow any |
59 | | //! serializable object to be stored in a capnproto Data field or passed to a |
60 | | //! capnproto interface. Use Priority<1> so this hook has medium priority, and |
61 | | //! higher priority hooks could take precedence over this one. |
62 | | template <typename LocalType, typename Value, typename Output> |
63 | | void CustomBuildField(TypeList<LocalType>, Priority<1>, InvokeContext& invoke_context, Value&& value, Output&& output) |
64 | | // Enable if serializeable and if LocalType is not cv or reference qualified. If |
65 | | // LocalType is cv or reference qualified, it is important to fall back to |
66 | | // lower-priority Priority<0> implementation of this function that strips cv |
67 | | // references, to prevent this CustomBuildField overload from taking precedence |
68 | | // over more narrow overloads for specific LocalTypes. |
69 | | requires Serializable<LocalType, DataStream> && std::is_same_v<LocalType, std::remove_cv_t<std::remove_reference_t<LocalType>>> |
70 | 6 | { |
71 | 6 | DataStream stream; |
72 | 6 | auto wrapper{ipc::capnp::Wrap(stream)}; |
73 | 6 | value.Serialize(wrapper); |
74 | 6 | auto result = output.init(stream.size()); |
75 | 6 | memcpy(result.begin(), stream.data(), stream.size()); |
76 | 6 | } void mp::CustomBuildField<COutPoint, COutPoint, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>>(mp::TypeList<COutPoint>, mp::Priority<1>, mp::InvokeContext&, COutPoint&&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>&&) requires Serializable<COutPoint, DataStream> && std::is_same_v<COutPoint, std::remove_cv<std::remove_reference<COutPoint>::type>::type> Line | Count | Source | 70 | 1 | { | 71 | 1 | DataStream stream; | 72 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 73 | 1 | value.Serialize(wrapper); | 74 | 1 | auto result = output.init(stream.size()); | 75 | 1 | memcpy(result.begin(), stream.data(), stream.size()); | 76 | 1 | } |
void mp::CustomBuildField<CTransaction, CTransaction const&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>>&>(mp::TypeList<CTransaction>, mp::Priority<1>, mp::InvokeContext&, CTransaction const&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>>&) requires Serializable<CTransaction, DataStream> && std::is_same_v<CTransaction, std::remove_cv<std::remove_reference<CTransaction>::type>::type> Line | Count | Source | 70 | 1 | { | 71 | 1 | DataStream stream; | 72 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 73 | 1 | value.Serialize(wrapper); | 74 | 1 | auto result = output.init(stream.size()); | 75 | 1 | memcpy(result.begin(), stream.data(), stream.size()); | 76 | 1 | } |
void mp::CustomBuildField<CTransaction, CTransaction const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>&>(mp::TypeList<CTransaction>, mp::Priority<1>, mp::InvokeContext&, CTransaction const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>&) requires Serializable<CTransaction, DataStream> && std::is_same_v<CTransaction, std::remove_cv<std::remove_reference<CTransaction>::type>::type> Line | Count | Source | 70 | 2 | { | 71 | 2 | DataStream stream; | 72 | 2 | auto wrapper{ipc::capnp::Wrap(stream)}; | 73 | 2 | value.Serialize(wrapper); | 74 | 2 | auto result = output.init(stream.size()); | 75 | 2 | memcpy(result.begin(), stream.data(), stream.size()); | 76 | 2 | } |
void mp::CustomBuildField<COutPoint, COutPoint, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, gen::FooInterface::PassOutPointResults::Builder>&>(mp::TypeList<COutPoint>, mp::Priority<1>, mp::InvokeContext&, COutPoint&&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, gen::FooInterface::PassOutPointResults::Builder>&) requires Serializable<COutPoint, DataStream> && std::is_same_v<COutPoint, std::remove_cv<std::remove_reference<COutPoint>::type>::type> Line | Count | Source | 70 | 1 | { | 71 | 1 | DataStream stream; | 72 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 73 | 1 | value.Serialize(wrapper); | 74 | 1 | auto result = output.init(stream.size()); | 75 | 1 | memcpy(result.begin(), stream.data(), stream.size()); | 76 | 1 | } |
void mp::CustomBuildField<CTransaction, CTransaction const&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, gen::FooInterface::PassTransactionResults::Builder>&>(mp::TypeList<CTransaction>, mp::Priority<1>, mp::InvokeContext&, CTransaction const&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, gen::FooInterface::PassTransactionResults::Builder>&) requires Serializable<CTransaction, DataStream> && std::is_same_v<CTransaction, std::remove_cv<std::remove_reference<CTransaction>::type>::type> Line | Count | Source | 70 | 1 | { | 71 | 1 | DataStream stream; | 72 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 73 | 1 | value.Serialize(wrapper); | 74 | 1 | auto result = output.init(stream.size()); | 75 | 1 | memcpy(result.begin(), stream.data(), stream.size()); | 76 | 1 | } |
Unexecuted instantiation: void mp::CustomBuildField<uint256, uint256, mp::StructField<mp::Accessor<mp::mining_fields::CurrentTip, 17>, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, uint256&&, mp::StructField<mp::Accessor<mp::mining_fields::CurrentTip, 17>, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&) requires Serializable<uint256, DataStream> && std::is_same_v<uint256, std::remove_cv<std::remove_reference<uint256>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<CBlock, CBlock const&, mp::StructField<mp::Accessor<mp::mining_fields::Block, 17>, capnp::Request<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, CBlock const&, mp::StructField<mp::Accessor<mp::mining_fields::Block, 17>, capnp::Request<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&) requires Serializable<CBlock, DataStream> && std::is_same_v<CBlock, std::remove_cv<std::remove_reference<CBlock>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<CBlock, CBlock const&, mp::StructField<mp::Accessor<mp::mining_fields::Block, 17>, capnp::Request<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, CBlock const&, mp::StructField<mp::Accessor<mp::mining_fields::Block, 17>, capnp::Request<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&) requires Serializable<CBlock, DataStream> && std::is_same_v<CBlock, std::remove_cv<std::remove_reference<CBlock>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<transaction_identifier<false>, transaction_identifier<false> const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>>(mp::TypeList<transaction_identifier<false>>, mp::Priority<1>, mp::InvokeContext&, transaction_identifier<false> const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>&&) requires Serializable<transaction_identifier<false>, DataStream> && std::is_same_v<transaction_identifier<false>, std::remove_cv<std::remove_reference<transaction_identifier<false>>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<transaction_identifier<true>, transaction_identifier<true> const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>>(mp::TypeList<transaction_identifier<true>>, mp::Priority<1>, mp::InvokeContext&, transaction_identifier<true> const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>&&) requires Serializable<transaction_identifier<true>, DataStream> && std::is_same_v<transaction_identifier<true>, std::remove_cv<std::remove_reference<transaction_identifier<true>>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<CTransaction, CTransaction const&, mp::StructField<mp::Accessor<mp::mining_fields::Coinbase, 17>, capnp::Request<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&>(mp::TypeList<CTransaction>, mp::Priority<1>, mp::InvokeContext&, CTransaction const&, mp::StructField<mp::Accessor<mp::mining_fields::Coinbase, 17>, capnp::Request<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&) requires Serializable<CTransaction, DataStream> && std::is_same_v<CTransaction, std::remove_cv<std::remove_reference<CTransaction>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<uint256, uint256&, mp::StructField<mp::Accessor<mp::common_fields::Hash, 19>, ipc::capnp::messages::BlockRef::Builder>&>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, uint256&, mp::StructField<mp::Accessor<mp::common_fields::Hash, 19>, ipc::capnp::messages::BlockRef::Builder>&) requires Serializable<uint256, DataStream> && std::is_same_v<uint256, std::remove_cv<std::remove_reference<uint256>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<CBlockHeader, CBlockHeader, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults::Builder>&>(mp::TypeList<CBlockHeader>, mp::Priority<1>, mp::InvokeContext&, CBlockHeader&&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults::Builder>&) requires Serializable<CBlockHeader, DataStream> && std::is_same_v<CBlockHeader, std::remove_cv<std::remove_reference<CBlockHeader>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<CBlock, CBlock, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::BlockTemplate::GetBlockResults::Builder>&>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, CBlock&&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::BlockTemplate::GetBlockResults::Builder>&) requires Serializable<CBlock, DataStream> && std::is_same_v<CBlock, std::remove_cv<std::remove_reference<CBlock>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<uint256, uint256&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Builder>&>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, uint256&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Builder>&) requires Serializable<uint256, DataStream> && std::is_same_v<uint256, std::remove_cv<std::remove_reference<uint256>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<CTxOut, CTxOut const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>>(mp::TypeList<CTxOut>, mp::Priority<1>, mp::InvokeContext&, CTxOut const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>&&) requires Serializable<CTxOut, DataStream> && std::is_same_v<CTxOut, std::remove_cv<std::remove_reference<CTxOut>::type>::type> Unexecuted instantiation: void mp::CustomBuildField<uint256, uint256 const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, uint256 const&, mp::ListOutput<capnp::List<capnp::Data, (capnp::Kind)1>>&&) requires Serializable<uint256, DataStream> && std::is_same_v<uint256, std::remove_cv<std::remove_reference<uint256>::type>::type> |
77 | | |
78 | | //! Overload multiprocess library's CustomReadField hook to allow any object |
79 | | //! with an Unserialize method to be read from a capnproto Data field or |
80 | | //! returned from capnproto interface. Use Priority<1> so this hook has medium |
81 | | //! priority, and higher priority hooks could take precedence over this one. |
82 | | template <typename LocalType, typename Input, typename ReadDest> |
83 | | decltype(auto) CustomReadField(TypeList<LocalType>, Priority<1>, InvokeContext& invoke_context, Input&& input, ReadDest&& read_dest) |
84 | | requires Unserializable<LocalType, DataStream> && (!ipc::capnp::Deserializable<LocalType>) |
85 | 2 | { |
86 | 2 | return read_dest.update([&](auto& value) { |
87 | 2 | if (!input.has()) return; |
88 | 2 | auto data = input.get(); |
89 | 2 | SpanReader stream({data.begin(), data.end()}); |
90 | 2 | auto wrapper{ipc::capnp::Wrap(stream)}; |
91 | 2 | value.Unserialize(wrapper); |
92 | 2 | }); auto decltype(auto) mp::CustomReadField<COutPoint, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassOutPointResults>>, mp::ReadDestUpdate<COutPoint>>(mp::TypeList<COutPoint>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassOutPointResults>>&&, mp::ReadDestUpdate<COutPoint>&&) requires Unserializable<COutPoint, DataStream> && !ipc::capnp::Deserializable<COutPoint>::'lambda'(COutPoint&)::operator()<COutPoint>(COutPoint&) const Line | Count | Source | 86 | 1 | return read_dest.update([&](auto& value) { | 87 | 1 | if (!input.has()) return; | 88 | 1 | auto data = input.get(); | 89 | 1 | SpanReader stream({data.begin(), data.end()}); | 90 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 91 | 1 | value.Unserialize(wrapper); | 92 | 1 | }); |
auto decltype(auto) mp::CustomReadField<COutPoint, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassOutPointParams::Reader const>, mp::ReadDestEmplace<COutPoint, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, COutPoint, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<COutPoint>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<COutPoint>, mp::Priority<1>, mp::InvokeContext&, COutPoint&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>&&) requires Unserializable<COutPoint, DataStream> && !ipc::capnp::Deserializable<COutPoint>::'lambda'(COutPoint&)::operator()<COutPoint>(COutPoint&) const Line | Count | Source | 86 | 1 | return read_dest.update([&](auto& value) { | 87 | 1 | if (!input.has()) return; | 88 | 1 | auto data = input.get(); | 89 | 1 | SpanReader stream({data.begin(), data.end()}); | 90 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 91 | 1 | value.Unserialize(wrapper); | 92 | 1 | }); |
Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::common_fields::Hash, 19>, ipc::capnp::messages::BlockRef::Reader const>, mp::ReadDestUpdate<uint256>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::common_fields::Hash, 19>, ipc::capnp::messages::BlockRef::Reader const>&&, mp::ReadDestUpdate<uint256>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256>::'lambda'(uint256&)::operator()<uint256>(uint256&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<CBlockHeader, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ReadDestUpdate<CBlockHeader>>(mp::TypeList<CBlockHeader>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&, mp::ReadDestUpdate<CBlockHeader>&&) requires Unserializable<CBlockHeader, DataStream> && !ipc::capnp::Deserializable<CBlockHeader>::'lambda'(CBlockHeader&)::operator()<CBlockHeader>(CBlockHeader&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<CBlock, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ReadDestUpdate<CBlock>>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&, mp::ReadDestUpdate<CBlock>&&) requires Unserializable<CBlock, DataStream> && !ipc::capnp::Deserializable<CBlock>::'lambda'(CBlock&)::operator()<CBlock>(CBlock&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&, mp::ReadDestUpdate<uint256>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&, mp::ReadDestUpdate<uint256>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256>::'lambda'(uint256&)::operator()<uint256>(uint256&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&, mp::ReadDestEmplace<uint256, auto decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::optional<uint256>>>(mp::TypeList<std::optional<uint256>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::optional<uint256>>&&)::'lambda'(uint256&)::operator()<std::optional<uint256>>(uint256&) const::'lambda'(auto&&...)>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::optional<uint256>>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256>::'lambda'(uint256&)::operator()<uint256>(uint256&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<CTxOut, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<CTxOut, auto decltype(auto) mp::ReadList<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&, decltype(auto) mp::CustomReadField<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>>(mp::TypeList<std::vector<CTxOut, std::allocator<CTxOut>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&)::'lambda'(CTxOut&, unsigned long), decltype(auto) mp::CustomReadField<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>>(mp::TypeList<std::vector<CTxOut, std::allocator<CTxOut>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&)::'lambda'(CTxOut&, auto&&...)>(mp::TypeList<CTxOut>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&, decltype(auto) mp::CustomReadField<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>>(mp::TypeList<std::vector<CTxOut, std::allocator<CTxOut>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&)::'lambda'(CTxOut&, unsigned long)&&, decltype(auto) mp::CustomReadField<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>>(mp::TypeList<std::vector<CTxOut, std::allocator<CTxOut>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&)::'lambda'(CTxOut&, auto&&...)&&)::'lambda'(CTxOut&)::operator()<std::vector<CTxOut, std::allocator<CTxOut>>>(CTxOut&) const::'lambda'(auto&&...)>>(mp::TypeList<CTxOut>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&) requires Unserializable<CTxOut, DataStream> && !ipc::capnp::Deserializable<CTxOut>::'lambda'(CTxOut&)::operator()<CTxOut>(CTxOut&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<uint256, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<uint256, auto decltype(auto) mp::ReadList<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&, decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>>(mp::TypeList<std::vector<uint256, std::allocator<uint256>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&)::'lambda'(uint256&, unsigned long), decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>>(mp::TypeList<std::vector<uint256, std::allocator<uint256>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&)::'lambda'(uint256&, auto&&...)>(mp::TypeList<uint256>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&, decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>>(mp::TypeList<std::vector<uint256, std::allocator<uint256>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&)::'lambda'(uint256&, unsigned long)&&, decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>>(mp::TypeList<std::vector<uint256, std::allocator<uint256>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&)::'lambda'(uint256&, auto&&...)&&)::'lambda'(uint256&)::operator()<std::vector<uint256, std::allocator<uint256>>>(uint256&) const::'lambda'(auto&&...)>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256>::'lambda'(uint256&)::operator()<uint256>(uint256&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::CurrentTip, 17>, ipc::capnp::messages::Mining::WaitTipChangedParams::Reader const>, mp::ReadDestEmplace<uint256, void mp::PassField<mp::Accessor<mp::mining_fields::CurrentTip, 17>, uint256, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<0>, mp::TypeList<uint256>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(auto&&...)>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, uint256&&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256>::'lambda'(uint256&)::operator()<uint256>(uint256&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<CBlock, mp::StructField<mp::Accessor<mp::mining_fields::Block, 17>, ipc::capnp::messages::Mining::CheckBlockParams::Reader const>, mp::ReadDestEmplace<CBlock, void mp::PassField<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<0>, mp::TypeList<CBlock const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(auto&&...)>>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, CBlock const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&) requires Unserializable<CBlock, DataStream> && !ipc::capnp::Deserializable<CBlock>::'lambda'(CBlock&)::operator()<CBlock>(CBlock&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<CBlock, mp::StructField<mp::Accessor<mp::mining_fields::Block, 17>, ipc::capnp::messages::Mining::SubmitBlockParams::Reader const>, mp::ReadDestEmplace<CBlock, void mp::PassField<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<0>, mp::TypeList<CBlock const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(auto&&...)>>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, CBlock const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&) requires Unserializable<CBlock, DataStream> && !ipc::capnp::Deserializable<CBlock>::'lambda'(CBlock&)::operator()<CBlock>(CBlock&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<transaction_identifier<false>, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<transaction_identifier<false>, auto decltype(auto) mp::ReadList<transaction_identifier<false>, mp::StructField<mp::Accessor<mp::mining_fields::Txids, 17>, ipc::capnp::messages::Mining::GetTransactionsByTxIDParams::Reader const>&, mp::ReadDestEmplace<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>&, decltype(auto) mp::CustomReadField<transaction_identifier<false>, mp::StructField<mp::Accessor<mp::mining_fields::Txids, 17>, ipc::capnp::messages::Mining::GetTransactionsByTxIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'(transaction_identifier<false>&, unsigned long), decltype(auto) mp::CustomReadField<transaction_identifier<false>, mp::StructField<mp::Accessor<mp::mining_fields::Txids, 17>, ipc::capnp::messages::Mining::GetTransactionsByTxIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'(transaction_identifier<false>&, auto&&...)>(mp::TypeList<transaction_identifier<false>>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, decltype(auto) mp::CustomReadField<transaction_identifier<false>, mp::StructField<mp::Accessor<mp::mining_fields::Txids, 17>, ipc::capnp::messages::Mining::GetTransactionsByTxIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'(transaction_identifier<false>&, auto&&...)&&)::'lambda'(transaction_identifier<false>&)::operator()<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>>(transaction_identifier<false>&) const::'lambda'(auto&&...)>>(mp::TypeList<transaction_identifier<false>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&) requires Unserializable<transaction_identifier<false>, DataStream> && !ipc::capnp::Deserializable<transaction_identifier<false>>::'lambda'(transaction_identifier<false>&)::operator()<transaction_identifier<false>>(transaction_identifier<false>&) const Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<transaction_identifier<true>, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<transaction_identifier<true>, auto decltype(auto) mp::ReadList<transaction_identifier<true>, mp::StructField<mp::Accessor<mp::mining_fields::Wtxids, 17>, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams::Reader const>&, mp::ReadDestEmplace<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>&, decltype(auto) mp::CustomReadField<transaction_identifier<true>, mp::StructField<mp::Accessor<mp::mining_fields::Wtxids, 17>, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'(transaction_identifier<true>&, unsigned long), decltype(auto) mp::CustomReadField<transaction_identifier<true>, mp::StructField<mp::Accessor<mp::mining_fields::Wtxids, 17>, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'(transaction_identifier<true>&, auto&&...)>(mp::TypeList<transaction_identifier<true>>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, decltype(auto) mp::CustomReadField<transaction_identifier<true>, mp::StructField<mp::Accessor<mp::mining_fields::Wtxids, 17>, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'(transaction_identifier<true>&, auto&&...)&&)::'lambda'(transaction_identifier<true>&)::operator()<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>>(transaction_identifier<true>&) const::'lambda'(auto&&...)>>(mp::TypeList<transaction_identifier<true>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&) requires Unserializable<transaction_identifier<true>, DataStream> && !ipc::capnp::Deserializable<transaction_identifier<true>>::'lambda'(transaction_identifier<true>&)::operator()<transaction_identifier<true>>(transaction_identifier<true>&) const |
93 | 2 | } decltype(auto) mp::CustomReadField<COutPoint, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassOutPointResults>>, mp::ReadDestUpdate<COutPoint>>(mp::TypeList<COutPoint>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassOutPointResults>>&&, mp::ReadDestUpdate<COutPoint>&&) requires Unserializable<COutPoint, DataStream> && !ipc::capnp::Deserializable<COutPoint> Line | Count | Source | 85 | 1 | { | 86 | 1 | return read_dest.update([&](auto& value) { | 87 | 1 | if (!input.has()) return; | 88 | 1 | auto data = input.get(); | 89 | 1 | SpanReader stream({data.begin(), data.end()}); | 90 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 91 | 1 | value.Unserialize(wrapper); | 92 | 1 | }); | 93 | 1 | } |
decltype(auto) mp::CustomReadField<COutPoint, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassOutPointParams::Reader const>, mp::ReadDestEmplace<COutPoint, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, COutPoint, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<COutPoint>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<COutPoint>, mp::Priority<1>, mp::InvokeContext&, COutPoint&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>&&) requires Unserializable<COutPoint, DataStream> && !ipc::capnp::Deserializable<COutPoint> Line | Count | Source | 85 | 1 | { | 86 | 1 | return read_dest.update([&](auto& value) { | 87 | 1 | if (!input.has()) return; | 88 | 1 | auto data = input.get(); | 89 | 1 | SpanReader stream({data.begin(), data.end()}); | 90 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 91 | 1 | value.Unserialize(wrapper); | 92 | 1 | }); | 93 | 1 | } |
Unexecuted instantiation: decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::common_fields::Hash, 19>, ipc::capnp::messages::BlockRef::Reader const>, mp::ReadDestUpdate<uint256>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::common_fields::Hash, 19>, ipc::capnp::messages::BlockRef::Reader const>&&, mp::ReadDestUpdate<uint256>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256> Unexecuted instantiation: decltype(auto) mp::CustomReadField<CBlockHeader, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ReadDestUpdate<CBlockHeader>>(mp::TypeList<CBlockHeader>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&, mp::ReadDestUpdate<CBlockHeader>&&) requires Unserializable<CBlockHeader, DataStream> && !ipc::capnp::Deserializable<CBlockHeader> Unexecuted instantiation: decltype(auto) mp::CustomReadField<CBlock, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ReadDestUpdate<CBlock>>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&, mp::ReadDestUpdate<CBlock>&&) requires Unserializable<CBlock, DataStream> && !ipc::capnp::Deserializable<CBlock> Unexecuted instantiation: decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&, mp::ReadDestUpdate<uint256>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&, mp::ReadDestUpdate<uint256>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256> Unexecuted instantiation: decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&, mp::ReadDestEmplace<uint256, auto decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::optional<uint256>>>(mp::TypeList<std::optional<uint256>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::optional<uint256>>&&)::'lambda'(uint256&)::operator()<std::optional<uint256>>(uint256&) const::'lambda'(auto&&...)>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::optional<uint256>>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256> Unexecuted instantiation: decltype(auto) mp::CustomReadField<CTxOut, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<CTxOut, auto decltype(auto) mp::ReadList<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&, decltype(auto) mp::CustomReadField<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>>(mp::TypeList<std::vector<CTxOut, std::allocator<CTxOut>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&)::'lambda'(CTxOut&, unsigned long), decltype(auto) mp::CustomReadField<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>>(mp::TypeList<std::vector<CTxOut, std::allocator<CTxOut>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&)::'lambda'(CTxOut&, auto&&...)>(mp::TypeList<CTxOut>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&, decltype(auto) mp::CustomReadField<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>>(mp::TypeList<std::vector<CTxOut, std::allocator<CTxOut>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&)::'lambda'(CTxOut&, unsigned long)&&, decltype(auto) mp::CustomReadField<CTxOut, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>>(mp::TypeList<std::vector<CTxOut, std::allocator<CTxOut>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&)::'lambda'(CTxOut&, auto&&...)&&)::'lambda'(CTxOut&)::operator()<std::vector<CTxOut, std::allocator<CTxOut>>>(CTxOut&) const::'lambda'(auto&&...)>>(mp::TypeList<CTxOut>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::RequiredOutputs, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::vector<CTxOut, std::allocator<CTxOut>>>&&) requires Unserializable<CTxOut, DataStream> && !ipc::capnp::Deserializable<CTxOut> Unexecuted instantiation: decltype(auto) mp::CustomReadField<uint256, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<uint256, auto decltype(auto) mp::ReadList<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&, decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>>(mp::TypeList<std::vector<uint256, std::allocator<uint256>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&)::'lambda'(uint256&, unsigned long), decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>>(mp::TypeList<std::vector<uint256, std::allocator<uint256>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&)::'lambda'(uint256&, auto&&...)>(mp::TypeList<uint256>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&, decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>>(mp::TypeList<std::vector<uint256, std::allocator<uint256>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&)::'lambda'(uint256&, unsigned long)&&, decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>>(mp::TypeList<std::vector<uint256, std::allocator<uint256>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&)::'lambda'(uint256&, auto&&...)&&)::'lambda'(uint256&)::operator()<std::vector<uint256, std::allocator<uint256>>>(uint256&) const::'lambda'(auto&&...)>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&, mp::ReadDestUpdate<std::vector<uint256, std::allocator<uint256>>>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256> Unexecuted instantiation: decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::CurrentTip, 17>, ipc::capnp::messages::Mining::WaitTipChangedParams::Reader const>, mp::ReadDestEmplace<uint256, void mp::PassField<mp::Accessor<mp::mining_fields::CurrentTip, 17>, uint256, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<0>, mp::TypeList<uint256>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(auto&&...)>>(mp::TypeList<uint256>, mp::Priority<1>, mp::InvokeContext&, uint256&&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&) requires Unserializable<uint256, DataStream> && !ipc::capnp::Deserializable<uint256> Unexecuted instantiation: decltype(auto) mp::CustomReadField<CBlock, mp::StructField<mp::Accessor<mp::mining_fields::Block, 17>, ipc::capnp::messages::Mining::CheckBlockParams::Reader const>, mp::ReadDestEmplace<CBlock, void mp::PassField<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<0>, mp::TypeList<CBlock const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(auto&&...)>>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, CBlock const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&) requires Unserializable<CBlock, DataStream> && !ipc::capnp::Deserializable<CBlock> Unexecuted instantiation: decltype(auto) mp::CustomReadField<CBlock, mp::StructField<mp::Accessor<mp::mining_fields::Block, 17>, ipc::capnp::messages::Mining::SubmitBlockParams::Reader const>, mp::ReadDestEmplace<CBlock, void mp::PassField<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<0>, mp::TypeList<CBlock const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(auto&&...)>>(mp::TypeList<CBlock>, mp::Priority<1>, mp::InvokeContext&, CBlock const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&) requires Unserializable<CBlock, DataStream> && !ipc::capnp::Deserializable<CBlock> Unexecuted instantiation: decltype(auto) mp::CustomReadField<transaction_identifier<false>, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<transaction_identifier<false>, auto decltype(auto) mp::ReadList<transaction_identifier<false>, mp::StructField<mp::Accessor<mp::mining_fields::Txids, 17>, ipc::capnp::messages::Mining::GetTransactionsByTxIDParams::Reader const>&, mp::ReadDestEmplace<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>&, decltype(auto) mp::CustomReadField<transaction_identifier<false>, mp::StructField<mp::Accessor<mp::mining_fields::Txids, 17>, ipc::capnp::messages::Mining::GetTransactionsByTxIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'(transaction_identifier<false>&, unsigned long), decltype(auto) mp::CustomReadField<transaction_identifier<false>, mp::StructField<mp::Accessor<mp::mining_fields::Txids, 17>, ipc::capnp::messages::Mining::GetTransactionsByTxIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'(transaction_identifier<false>&, auto&&...)>(mp::TypeList<transaction_identifier<false>>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, decltype(auto) mp::CustomReadField<transaction_identifier<false>, mp::StructField<mp::Accessor<mp::mining_fields::Txids, 17>, ipc::capnp::messages::Mining::GetTransactionsByTxIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'(transaction_identifier<false>&, auto&&...)&&)::'lambda'(transaction_identifier<false>&)::operator()<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>>>(transaction_identifier<false>&) const::'lambda'(auto&&...)>>(mp::TypeList<transaction_identifier<false>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&) requires Unserializable<transaction_identifier<false>, DataStream> && !ipc::capnp::Deserializable<transaction_identifier<false>> Unexecuted instantiation: decltype(auto) mp::CustomReadField<transaction_identifier<true>, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<transaction_identifier<true>, auto decltype(auto) mp::ReadList<transaction_identifier<true>, mp::StructField<mp::Accessor<mp::mining_fields::Wtxids, 17>, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams::Reader const>&, mp::ReadDestEmplace<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>&, decltype(auto) mp::CustomReadField<transaction_identifier<true>, mp::StructField<mp::Accessor<mp::mining_fields::Wtxids, 17>, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'(transaction_identifier<true>&, unsigned long), decltype(auto) mp::CustomReadField<transaction_identifier<true>, mp::StructField<mp::Accessor<mp::mining_fields::Wtxids, 17>, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'(transaction_identifier<true>&, auto&&...)>(mp::TypeList<transaction_identifier<true>>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, decltype(auto) mp::CustomReadField<transaction_identifier<true>, mp::StructField<mp::Accessor<mp::mining_fields::Wtxids, 17>, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams::Reader const>, mp::ReadDestEmplace<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>, void mp::PassField<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'(transaction_identifier<true>&, auto&&...)&&)::'lambda'(transaction_identifier<true>&)::operator()<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>>>(transaction_identifier<true>&) const::'lambda'(auto&&...)>>(mp::TypeList<transaction_identifier<true>>, mp::Priority<1>, mp::InvokeContext&, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&) requires Unserializable<transaction_identifier<true>, DataStream> && !ipc::capnp::Deserializable<transaction_identifier<true>> |
94 | | |
95 | | //! Overload multiprocess library's CustomReadField hook to allow any object |
96 | | //! with a deserialize constructor to be read from a capnproto Data field or |
97 | | //! returned from capnproto interface. Use Priority<1> so this hook has medium |
98 | | //! priority, and higher priority hooks could take precedence over this one. |
99 | | template <typename LocalType, typename Input, typename ReadDest> |
100 | | decltype(auto) CustomReadField(TypeList<LocalType>, Priority<1>, InvokeContext& invoke_context, Input&& input, ReadDest&& read_dest) |
101 | | requires ipc::capnp::Deserializable<LocalType> |
102 | 4 | { |
103 | 4 | assert(input.has()); |
104 | 4 | auto data = input.get(); |
105 | 4 | SpanReader stream({data.begin(), data.end()}); |
106 | 4 | auto wrapper{ipc::capnp::Wrap(stream)}; |
107 | 4 | return read_dest.construct(::deserialize, wrapper); |
108 | 4 | } decltype(auto) mp::CustomReadField<CTransaction, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionResults>>, mp::ReadDestEmplace<CTransaction, auto decltype(auto) mp::CustomReadField<CTransaction, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionResults>>, mp::ReadDestUpdate<std::shared_ptr<CTransaction const>>>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionResults>>&&, mp::ReadDestUpdate<std::shared_ptr<CTransaction const>>&&)::'lambda'(CTransaction&)::operator()<std::shared_ptr<CTransaction const>>(CTransaction&) const::'lambda'(auto&&...)>>(mp::TypeList<CTransaction>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionResults>>&&, mp::ReadDestUpdate<std::shared_ptr<CTransaction const>>&&) requires ipc::capnp::Deserializable<CTransaction> Line | Count | Source | 102 | 1 | { | 103 | 1 | assert(input.has()); | 104 | 1 | auto data = input.get(); | 105 | 1 | SpanReader stream({data.begin(), data.end()}); | 106 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 107 | 1 | return read_dest.construct(::deserialize, wrapper); | 108 | 1 | } |
decltype(auto) mp::CustomReadField<CTransaction, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<CTransaction, auto decltype(auto) mp::CustomReadField<CTransaction, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<std::shared_ptr<CTransaction const>, auto decltype(auto) mp::ReadList<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, unsigned long), decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, auto&&...)>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, unsigned long)&&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, auto&&...)&&)::'lambda'(std::shared_ptr<CTransaction const>&)::operator()<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>(std::shared_ptr<CTransaction const>&) const::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<std::shared_ptr<CTransaction const> const>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&)::operator()<std::shared_ptr<CTransaction const>>(std::shared_ptr<CTransaction const>&) const::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionsResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&) requires ipc::capnp::Deserializable<std::shared_ptr<CTransaction const>> Line | Count | Source | 102 | 1 | { | 103 | 1 | assert(input.has()); | 104 | 1 | auto data = input.get(); | 105 | 1 | SpanReader stream({data.begin(), data.end()}); | 106 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 107 | 1 | return read_dest.construct(::deserialize, wrapper); | 108 | 1 | } |
decltype(auto) mp::CustomReadField<CTransaction, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassTransactionParams::Reader const>, mp::ReadDestEmplace<CTransaction, auto decltype(auto) mp::CustomReadField<CTransaction, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassTransactionParams::Reader const>, mp::ReadDestEmplace<std::shared_ptr<CTransaction const>, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::shared_ptr<CTransaction const>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::shared_ptr<CTransaction const>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::Priority<1>, mp::InvokeContext&, std::shared_ptr<CTransaction const>&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>>&&)::'lambda'(CTransaction&)::operator()<std::shared_ptr<CTransaction const>>(CTransaction&) const::'lambda'(auto&&...)>>(mp::TypeList<CTransaction>, mp::Priority<1>, mp::InvokeContext&, std::shared_ptr<CTransaction const>&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>>&&) requires ipc::capnp::Deserializable<CTransaction> Line | Count | Source | 102 | 1 | { | 103 | 1 | assert(input.has()); | 104 | 1 | auto data = input.get(); | 105 | 1 | SpanReader stream({data.begin(), data.end()}); | 106 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 107 | 1 | return read_dest.construct(::deserialize, wrapper); | 108 | 1 | } |
decltype(auto) mp::CustomReadField<CTransaction, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<CTransaction, auto decltype(auto) mp::CustomReadField<CTransaction, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<std::shared_ptr<CTransaction const>, auto decltype(auto) mp::ReadList<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassTransactionsParams::Reader const>&, mp::ReadDestEmplace<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassTransactionsParams::Reader const>, mp::ReadDestEmplace<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, unsigned long), decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassTransactionsParams::Reader const>, mp::ReadDestEmplace<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, auto&&...)>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::InvokeContext&, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassTransactionsParams::Reader const>, mp::ReadDestEmplace<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, auto&&...)&&)::'lambda'(std::shared_ptr<CTransaction const>&)::operator()<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>(std::shared_ptr<CTransaction const>&) const::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<std::shared_ptr<CTransaction const> const>>, mp::Priority<1>, mp::InvokeContext&, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&&)::'lambda'(std::shared_ptr<CTransaction const>&)::operator()<std::shared_ptr<CTransaction const>>(std::shared_ptr<CTransaction const>&) const::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::Priority<1>, mp::InvokeContext&, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&&, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>&&) requires ipc::capnp::Deserializable<std::shared_ptr<CTransaction const>> Line | Count | Source | 102 | 1 | { | 103 | 1 | assert(input.has()); | 104 | 1 | auto data = input.get(); | 105 | 1 | SpanReader stream({data.begin(), data.end()}); | 106 | 1 | auto wrapper{ipc::capnp::Wrap(stream)}; | 107 | 1 | return read_dest.construct(::deserialize, wrapper); | 108 | 1 | } |
Unexecuted instantiation: decltype(auto) mp::CustomReadField<CTransaction, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<CTransaction, auto decltype(auto) mp::CustomReadField<CTransaction, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<std::shared_ptr<CTransaction const>, auto decltype(auto) mp::ReadList<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, unsigned long), decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, auto&&...)>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, unsigned long)&&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, auto&&...)&&)::'lambda'(std::shared_ptr<CTransaction const>&)::operator()<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>(std::shared_ptr<CTransaction const>&) const::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<std::shared_ptr<CTransaction const> const>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&)::operator()<std::shared_ptr<CTransaction const>>(std::shared_ptr<CTransaction const>&) const::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&) requires ipc::capnp::Deserializable<std::shared_ptr<CTransaction const>> Unexecuted instantiation: decltype(auto) mp::CustomReadField<CTransaction, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<CTransaction, auto decltype(auto) mp::CustomReadField<CTransaction, mp::ValueField<capnp::Data::Reader>, mp::ReadDestEmplace<std::shared_ptr<CTransaction const>, auto decltype(auto) mp::ReadList<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, unsigned long), decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, auto&&...)>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, unsigned long)&&, decltype(auto) mp::CustomReadField<std::shared_ptr<CTransaction const>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>>(mp::TypeList<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&, auto&&...)&&)::'lambda'(std::shared_ptr<CTransaction const>&)::operator()<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>(std::shared_ptr<CTransaction const>&) const::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<std::shared_ptr<CTransaction const> const>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&)::'lambda'(std::shared_ptr<CTransaction const>&)::operator()<std::shared_ptr<CTransaction const>>(std::shared_ptr<CTransaction const>&) const::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&, mp::ReadDestUpdate<std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&) requires ipc::capnp::Deserializable<std::shared_ptr<CTransaction const>> Unexecuted instantiation: decltype(auto) mp::CustomReadField<CTransaction, mp::StructField<mp::Accessor<mp::mining_fields::Coinbase, 17>, ipc::capnp::messages::BlockTemplate::SubmitSolutionParams::Reader const>, mp::ReadDestEmplace<CTransaction, auto decltype(auto) mp::CustomReadField<CTransaction, mp::StructField<mp::Accessor<mp::mining_fields::Coinbase, 17>, ipc::capnp::messages::BlockTemplate::SubmitSolutionParams::Reader const>, mp::ReadDestEmplace<std::shared_ptr<CTransaction const>, void mp::PassField<mp::Accessor<mp::mining_fields::Coinbase, 17>, std::shared_ptr<CTransaction const>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>, unsigned int, unsigned int, unsigned int>(mp::Priority<0>, mp::TypeList<std::shared_ptr<CTransaction const>>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&, unsigned int&&, unsigned int&&, unsigned int&&)::'lambda'(auto&&...)>>(mp::TypeList<std::shared_ptr<CTransaction const>>, mp::Priority<1>, mp::InvokeContext&, std::shared_ptr<CTransaction const>&&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'(CTransaction&)::operator()<std::shared_ptr<CTransaction const>>(CTransaction&) const::'lambda'(auto&&...)>>(mp::TypeList<CTransaction>, mp::Priority<1>, mp::InvokeContext&, std::shared_ptr<CTransaction const>&&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&) requires ipc::capnp::Deserializable<CTransaction> |
109 | | |
110 | | //! Overload CustomBuildField and CustomReadField to serialize UniValue |
111 | | //! parameters and return values as JSON strings. |
112 | | template <typename Value, typename Output> |
113 | | void CustomBuildField(TypeList<UniValue>, Priority<1>, InvokeContext& invoke_context, Value&& value, Output&& output) |
114 | 10 | { |
115 | 10 | std::string str = value.write(); |
116 | 10 | auto result = output.init(str.size()); |
117 | 10 | memcpy(result.begin(), str.data(), str.size()); |
118 | 10 | } void mp::CustomBuildField<UniValue, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, UniValue&&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>>&&) Line | Count | Source | 114 | 1 | { | 115 | 1 | std::string str = value.write(); | 116 | 1 | auto result = output.init(str.size()); | 117 | 1 | memcpy(result.begin(), str.data(), str.size()); | 118 | 1 | } |
void mp::CustomBuildField<UniValue, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, gen::FooInterface::PassUniValueResults::Builder>&>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, UniValue&&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, gen::FooInterface::PassUniValueResults::Builder>&) Line | Count | Source | 114 | 1 | { | 115 | 1 | std::string str = value.write(); | 116 | 1 | auto result = output.init(str.size()); | 117 | 1 | memcpy(result.begin(), str.data(), str.size()); | 118 | 1 | } |
void mp::CustomBuildField<UniValue, mp::StructField<mp::Accessor<mp::rpc_fields::Request, 17>, capnp::Request<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, UniValue&&, mp::StructField<mp::Accessor<mp::rpc_fields::Request, 17>, capnp::Request<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&) Line | Count | Source | 114 | 4 | { | 115 | 4 | std::string str = value.write(); | 116 | 4 | auto result = output.init(str.size()); | 117 | 4 | memcpy(result.begin(), str.data(), str.size()); | 118 | 4 | } |
void mp::CustomBuildField<UniValue, mp::StructField<mp::Accessor<mp::rpc_fields::Result, 18>, ipc::capnp::messages::Rpc::ExecuteRpcResults::Builder>&>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, UniValue&&, mp::StructField<mp::Accessor<mp::rpc_fields::Result, 18>, ipc::capnp::messages::Rpc::ExecuteRpcResults::Builder>&) Line | Count | Source | 114 | 4 | { | 115 | 4 | std::string str = value.write(); | 116 | 4 | auto result = output.init(str.size()); | 117 | 4 | memcpy(result.begin(), str.data(), str.size()); | 118 | 4 | } |
|
119 | | |
120 | | template <typename Input, typename ReadDest> |
121 | | decltype(auto) CustomReadField(TypeList<UniValue>, Priority<1>, InvokeContext& invoke_context, Input&& input, |
122 | | ReadDest&& read_dest) |
123 | 10 | { |
124 | 10 | return read_dest.update([&](auto& value) { |
125 | 10 | auto data = input.get(); |
126 | 10 | value.read(std::string_view{data.begin(), data.size()}); |
127 | 10 | }); auto decltype(auto) mp::CustomReadField<mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassUniValueResults>>, mp::ReadDestUpdate<UniValue>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassUniValueResults>>&&, mp::ReadDestUpdate<UniValue>&&)::'lambda'(mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassUniValueResults>>&)::operator()<UniValue>(mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassUniValueResults>>&) const Line | Count | Source | 124 | 1 | return read_dest.update([&](auto& value) { | 125 | 1 | auto data = input.get(); | 126 | 1 | value.read(std::string_view{data.begin(), data.size()}); | 127 | 1 | }); |
auto decltype(auto) mp::CustomReadField<mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassUniValueParams::Reader const>, mp::ReadDestEmplace<UniValue, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, UniValue, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<UniValue>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassUniValueParams::Reader const>&&, UniValue&&)::'lambda'(mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassUniValueParams::Reader const>&)::operator()<UniValue>(mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassUniValueParams::Reader const>&) const Line | Count | Source | 124 | 1 | return read_dest.update([&](auto& value) { | 125 | 1 | auto data = input.get(); | 126 | 1 | value.read(std::string_view{data.begin(), data.size()}); | 127 | 1 | }); |
auto decltype(auto) mp::CustomReadField<mp::StructField<mp::Accessor<mp::rpc_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ReadDestUpdate<UniValue>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::rpc_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&, mp::ReadDestUpdate<UniValue>&&)::'lambda'(mp::StructField<mp::Accessor<mp::rpc_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Rpc::ExecuteRpcResults>>&)::operator()<UniValue>(mp::StructField<mp::Accessor<mp::rpc_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Rpc::ExecuteRpcResults>>&) const Line | Count | Source | 124 | 4 | return read_dest.update([&](auto& value) { | 125 | 4 | auto data = input.get(); | 126 | 4 | value.read(std::string_view{data.begin(), data.size()}); | 127 | 4 | }); |
auto decltype(auto) mp::CustomReadField<mp::StructField<mp::Accessor<mp::rpc_fields::Request, 17>, ipc::capnp::messages::Rpc::ExecuteRpcParams::Reader const>, mp::ReadDestEmplace<UniValue, void mp::PassField<mp::Accessor<mp::rpc_fields::Request, 17>, UniValue, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<0>, mp::TypeList<UniValue>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(auto&&...)>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::rpc_fields::Request, 17>, ipc::capnp::messages::Rpc::ExecuteRpcParams::Reader const>&&, UniValue&&)::'lambda'(mp::StructField<mp::Accessor<mp::rpc_fields::Request, 17>, ipc::capnp::messages::Rpc::ExecuteRpcParams::Reader const>&)::operator()<UniValue>(mp::StructField<mp::Accessor<mp::rpc_fields::Request, 17>, ipc::capnp::messages::Rpc::ExecuteRpcParams::Reader const>&) const Line | Count | Source | 124 | 4 | return read_dest.update([&](auto& value) { | 125 | 4 | auto data = input.get(); | 126 | 4 | value.read(std::string_view{data.begin(), data.size()}); | 127 | 4 | }); |
|
128 | 10 | } decltype(auto) mp::CustomReadField<mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassUniValueResults>>, mp::ReadDestUpdate<UniValue>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassUniValueResults>>&&, mp::ReadDestUpdate<UniValue>&&) Line | Count | Source | 123 | 1 | { | 124 | 1 | return read_dest.update([&](auto& value) { | 125 | 1 | auto data = input.get(); | 126 | 1 | value.read(std::string_view{data.begin(), data.size()}); | 127 | 1 | }); | 128 | 1 | } |
decltype(auto) mp::CustomReadField<mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassUniValueParams::Reader const>, mp::ReadDestEmplace<UniValue, void mp::PassField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, UniValue, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>>, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>>(mp::Priority<0>, mp::TypeList<UniValue>, mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>>&, mp::ServerRet<mp::Accessor<mp::ipc_test_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(auto&&...)>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassUniValueParams::Reader const>&&, UniValue&&) Line | Count | Source | 123 | 1 | { | 124 | 1 | return read_dest.update([&](auto& value) { | 125 | 1 | auto data = input.get(); | 126 | 1 | value.read(std::string_view{data.begin(), data.size()}); | 127 | 1 | }); | 128 | 1 | } |
decltype(auto) mp::CustomReadField<mp::StructField<mp::Accessor<mp::rpc_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ReadDestUpdate<UniValue>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::rpc_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&, mp::ReadDestUpdate<UniValue>&&) Line | Count | Source | 123 | 4 | { | 124 | 4 | return read_dest.update([&](auto& value) { | 125 | 4 | auto data = input.get(); | 126 | 4 | value.read(std::string_view{data.begin(), data.size()}); | 127 | 4 | }); | 128 | 4 | } |
decltype(auto) mp::CustomReadField<mp::StructField<mp::Accessor<mp::rpc_fields::Request, 17>, ipc::capnp::messages::Rpc::ExecuteRpcParams::Reader const>, mp::ReadDestEmplace<UniValue, void mp::PassField<mp::Accessor<mp::rpc_fields::Request, 17>, UniValue, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<0>, mp::TypeList<UniValue>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(auto&&...)>>(mp::TypeList<UniValue>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::rpc_fields::Request, 17>, ipc::capnp::messages::Rpc::ExecuteRpcParams::Reader const>&&, UniValue&&) Line | Count | Source | 123 | 4 | { | 124 | 4 | return read_dest.update([&](auto& value) { | 125 | 4 | auto data = input.get(); | 126 | 4 | value.read(std::string_view{data.begin(), data.size()}); | 127 | 4 | }); | 128 | 4 | } |
|
129 | | |
130 | | //! Interpret empty Data fields as null CTransactionRef values. This is safe to |
131 | | //! do because no CTransaction is ever serialized as empty Data, and it is |
132 | | //! convenient because this allows std::vector<CTransactionRef> to be passed as |
133 | | //! List(Data) even if the vector contains null values, and even though Cap'n |
134 | | //! Proto does not (currently) allow distinguishing between null and empty Data |
135 | | //! values in a List. Interpreting empty Data values as null CTransactionRef |
136 | | //! values works well for this purpose. |
137 | | template <typename Input> |
138 | | bool CustomHasField(TypeList<CTransaction>, InvokeContext& invoke_context, const Input& input) |
139 | 6 | { |
140 | 6 | return input.get().size() > 0; |
141 | 6 | } bool mp::CustomHasField<mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionResults>>>(mp::TypeList<CTransaction>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Result, 18>, capnp::Response<gen::FooInterface::PassTransactionResults>> const&) Line | Count | Source | 139 | 1 | { | 140 | 1 | return input.get().size() > 0; | 141 | 1 | } |
bool mp::CustomHasField<mp::ValueField<capnp::Data::Reader>>(mp::TypeList<CTransaction>, mp::InvokeContext&, mp::ValueField<capnp::Data::Reader> const&) Line | Count | Source | 139 | 4 | { | 140 | 4 | return input.get().size() > 0; | 141 | 4 | } |
bool mp::CustomHasField<mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassTransactionParams::Reader const>>(mp::TypeList<CTransaction>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::ipc_test_fields::Arg, 17>, gen::FooInterface::PassTransactionParams::Reader const> const&) Line | Count | Source | 139 | 1 | { | 140 | 1 | return input.get().size() > 0; | 141 | 1 | } |
Unexecuted instantiation: bool mp::CustomHasField<mp::StructField<mp::Accessor<mp::mining_fields::Coinbase, 17>, ipc::capnp::messages::BlockTemplate::SubmitSolutionParams::Reader const>>(mp::TypeList<CTransaction>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Coinbase, 17>, ipc::capnp::messages::BlockTemplate::SubmitSolutionParams::Reader const> const&) |
142 | | } // namespace mp |
143 | | |
144 | | #endif // BITCOIN_IPC_CAPNP_COMMON_TYPES_H |