aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnthony Towns <aj@erisian.com.au>2023-09-11 18:36:11 +1000
committerAnthony Towns <aj@erisian.com.au>2023-09-14 10:25:26 +1000
commit5e5c8f86b60a8018e8801fb44bbe56ce97d9deef (patch)
treee5e5dcce04fc23c66f9b0102899eca89bb70a7aa /src
parent33203f59b482bddfe0bbe7d497cb8731ce8334a4 (diff)
downloadbitcoin-5e5c8f86b60a8018e8801fb44bbe56ce97d9deef.tar.xz
serialize: add SER_PARAMS_OPFUNC
Diffstat (limited to 'src')
-rw-r--r--src/netaddress.h1
-rw-r--r--src/protocol.h1
-rw-r--r--src/serialize.h13
3 files changed, 15 insertions, 0 deletions
diff --git a/src/netaddress.h b/src/netaddress.h
index a0944c886f..7d3659a11a 100644
--- a/src/netaddress.h
+++ b/src/netaddress.h
@@ -218,6 +218,7 @@ public:
};
struct SerParams {
const Encoding enc;
+ SER_PARAMS_OPFUNC
};
static constexpr SerParams V1{Encoding::V1};
static constexpr SerParams V2{Encoding::V2};
diff --git a/src/protocol.h b/src/protocol.h
index a7ca0c6f3e..e1caba766f 100644
--- a/src/protocol.h
+++ b/src/protocol.h
@@ -396,6 +396,7 @@ public:
};
struct SerParams : CNetAddr::SerParams {
const Format fmt;
+ SER_PARAMS_OPFUNC
};
static constexpr SerParams V1_NETWORK{{CNetAddr::Encoding::V1}, Format::Network};
static constexpr SerParams V2_NETWORK{{CNetAddr::Encoding::V2}, Format::Network};
diff --git a/src/serialize.h b/src/serialize.h
index 7e4788a5ca..04b29d1ded 100644
--- a/src/serialize.h
+++ b/src/serialize.h
@@ -1192,4 +1192,17 @@ static auto WithParams(const Params& params, T&& t)
return ParamsWrapper<Params, T>{params, t};
}
+/**
+ * Helper macro for SerParams structs
+ *
+ * Allows you define SerParams instances and then apply them directly
+ * to an object via function call syntax, eg:
+ *
+ * constexpr SerParams FOO{....};
+ * ss << FOO(obj);
+ */
+#define SER_PARAMS_OPFUNC \
+ template <typename T> \
+ auto operator()(T&& t) const { return WithParams(*this, t); }
+
#endif // BITCOIN_SERIALIZE_H