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