mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 14:38:29 +01:00
multiprocess: Add type conversion code for UniValue types
Extend IPC unit test to cover this and verify the serialization happens correctly.
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <clientversion.h>
|
||||
#include <streams.h>
|
||||
#include <univalue.h>
|
||||
|
||||
#include <cstddef>
|
||||
#include <mp/proxy-types.h>
|
||||
@@ -84,6 +85,24 @@ CustomReadField(TypeList<LocalType>, Priority<1>, InvokeContext& invoke_context,
|
||||
value.Unserialize(stream);
|
||||
});
|
||||
}
|
||||
|
||||
template <typename Value, typename Output>
|
||||
void CustomBuildField(TypeList<UniValue>, Priority<1>, InvokeContext& invoke_context, Value&& value, Output&& output)
|
||||
{
|
||||
std::string str = value.write();
|
||||
auto result = output.init(str.size());
|
||||
memcpy(result.begin(), str.data(), str.size());
|
||||
}
|
||||
|
||||
template <typename Input, typename ReadDest>
|
||||
decltype(auto) CustomReadField(TypeList<UniValue>, Priority<1>, InvokeContext& invoke_context, Input&& input,
|
||||
ReadDest&& read_dest)
|
||||
{
|
||||
return read_dest.update([&](auto& value) {
|
||||
auto data = input.get();
|
||||
value.read(std::string_view{data.begin(), data.size()});
|
||||
});
|
||||
}
|
||||
} // namespace mp
|
||||
|
||||
#endif // BITCOIN_IPC_CAPNP_COMMON_TYPES_H
|
||||
|
||||
Reference in New Issue
Block a user