Bitcoin Core 29.99.0
P2P Digital Currency
foo-types.h
Go to the documentation of this file.
1// Copyright (c) 2019 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 MP_TEST_FOO_TYPES_H
6#define MP_TEST_FOO_TYPES_H
7
8#include <mp/proxy-types.h>
9#include <mp/type-context.h>
10#include <mp/type-decay.h>
11#include <mp/type-interface.h>
12#include <mp/type-map.h>
13#include <mp/type-message.h>
14#include <mp/type-number.h>
15#include <mp/type-set.h>
16#include <mp/type-string.h>
17#include <mp/type-struct.h>
18#include <mp/type-threadmap.h>
19#include <mp/type-vector.h>
20
21namespace mp {
22namespace test {
23
24template <typename Output>
25void CustomBuildField(TypeList<FooCustom>, Priority<1>, InvokeContext& invoke_context, const FooCustom& value, Output&& output)
26{
27 BuildField(TypeList<std::string>(), invoke_context, output, value.v1);
28 output.setV2(value.v2);
29}
30
31template <typename Input, typename ReadDest>
32decltype(auto) CustomReadField(TypeList<FooCustom>, Priority<1>, InvokeContext& invoke_context, Input&& input, ReadDest&& read_dest)
33{
34 messages::FooCustom::Reader custom = input.get();
35 return read_dest.update([&](FooCustom& value) {
36 value.v1 = ReadField(TypeList<std::string>(), invoke_context, mp::Make<mp::ValueField>(custom.getV1()), ReadDestTemp<std::string>());
37 value.v2 = custom.getV2();
38 });
39}
40
41} // namespace test
42
43inline void CustomBuildMessage(InvokeContext& invoke_context,
44 const test::FooMessage& src,
45 test::messages::FooMessage::Builder&& builder)
46{
47 builder.setMessage(src.message + " build");
48}
49
50inline void CustomReadMessage(InvokeContext& invoke_context,
51 const test::messages::FooMessage::Reader& reader,
52 test::FooMessage& dest)
53{
54 dest.message = std::string{reader.getMessage()} + " read";
55}
56
57inline void CustomBuildMessage(InvokeContext& invoke_context,
58 const test::FooMutable& src,
59 test::messages::FooMutable::Builder&& builder)
60{
61 builder.setMessage(src.message + " build");
62}
63
64inline void CustomReadMessage(InvokeContext& invoke_context,
65 const test::messages::FooMutable::Reader& reader,
66 test::FooMutable& dest)
67{
68 dest.message = std::string{reader.getMessage()} + " read";
69}
70
71inline void CustomPassMessage(InvokeContext& invoke_context,
72 const test::messages::FooMutable::Reader& reader,
73 test::messages::FooMutable::Builder builder,
74 std::function<void(test::FooMutable&)>&& fn)
75{
77 mut.message = std::string{reader.getMessage()} + " pass";
78 fn(mut);
79 builder.setMessage(mut.message + " return");
80}
81} // namespace mp
82
83#endif // MP_TEST_FOO_TYPES_H
void CustomBuildField(TypeList< FooCustom >, Priority< 1 >, InvokeContext &invoke_context, const FooCustom &value, Output &&output)
Definition: foo-types.h:25
decltype(auto) CustomReadField(TypeList< FooCustom >, Priority< 1 >, InvokeContext &invoke_context, Input &&input, ReadDest &&read_dest)
Definition: foo-types.h:32
Functions to serialize / deserialize common bitcoin types.
Definition: common-types.h:57
void CustomPassMessage(InvokeContext &invoke_context, const test::messages::FooMutable::Reader &reader, test::messages::FooMutable::Builder builder, std::function< void(test::FooMutable &)> &&fn)
Definition: foo-types.h:71
void CustomReadMessage(InvokeContext &invoke_context, const ipc::capnp::messages::BlockValidationState::Reader &reader, BlockValidationState &dest)
Definition: mining.cpp:29
void BuildField(TypeList< LocalTypes... >, Context &context, Output &&output, Values &&... values)
Definition: proxy-types.h:175
decltype(auto) ReadField(TypeList< LocalTypes... >, Args &&... args)
Definition: proxy-types.h:145
void CustomBuildMessage(InvokeContext &invoke_context, const BlockValidationState &src, ipc::capnp::messages::BlockValidationState::Builder &&builder)
Definition: mining.cpp:11
Function parameter type for prioritizing overloaded function calls that would otherwise be ambiguous.
Definition: util.h:109
Generic utility functions used by capnp code.
Definition: util.h:33
std::string v1
Definition: foo.h:28
std::string message
Definition: foo.h:38
std::string message
Definition: foo.h:43