summaryrefslogtreecommitdiff
path: root/modules/codec/c++
diff options
context:
space:
mode:
Diffstat (limited to 'modules/codec/c++')
-rw-r--r--modules/codec/c++/schema.hpp3
-rw-r--r--modules/codec/c++/schema_hash.hpp20
2 files changed, 17 insertions, 6 deletions
diff --git a/modules/codec/c++/schema.hpp b/modules/codec/c++/schema.hpp
index 5348cfe..82fc0a5 100644
--- a/modules/codec/c++/schema.hpp
+++ b/modules/codec/c++/schema.hpp
@@ -116,6 +116,9 @@ using VarLong = VariableLengthPrimitive<SignedInteger, 10>;
template <class Request, class Response>
struct Function {
static constexpr string_literal name = "Function";
+
+ using RequestT = Request;
+ using ResponseT = Response;
};
template <class... T> struct Interface {
diff --git a/modules/codec/c++/schema_hash.hpp b/modules/codec/c++/schema_hash.hpp
index 90ab208..5e44497 100644
--- a/modules/codec/c++/schema_hash.hpp
+++ b/modules/codec/c++/schema_hash.hpp
@@ -125,6 +125,18 @@ struct schema_hash_seed<schema::Tuple<T...>> {
}
};
+template<typename V, string_literal K>
+struct schema_hash_seed<schema::Member<V,K>> {
+ using Schema = schema::Member<V,K>;
+
+ static constexpr uint32_t apply(uint32_t seed){
+ seed = hash_literal<Schema::name>::apply(seed);
+ seed = schema_hash_seed<V>::apply(seed);
+ seed = hash_literal<K>::apply(seed);
+ return seed;
+ }
+};
+
template<typename... V, string_literal... K>
struct schema_hash_seed<schema::Struct<schema::Member<V,K>...>> {
using Schema = schema::Struct<schema::Member<V,K>...>;
@@ -135,9 +147,7 @@ struct schema_hash_seed<schema::Struct<schema::Member<V,K>...>> {
constexpr string_literal Lit = parameter_key_pack_type<i,K...>::literal;
using MemberT = typename parameter_pack_type<i,schema::Member<V,K>...>::type;
- seed = hash_literal<MemberT::name>::apply(seed);
- seed = schema_hash_seed<Type>::apply(seed);
- seed = hash_literal<Lit>::apply(seed);
+ seed = schema_hash_seed<MemberT>::apply(seed);
if constexpr ( (i+1) < sizeof...(V) ){
return apply_ele<i+1>(seed);
@@ -176,9 +186,7 @@ struct schema_hash_seed<schema::Interface<schema::Member<T, Names>...>> {
constexpr string_literal Lit = parameter_key_pack_type<i,Names...>::literal;
using MemberT = schema::Member<Type,Lit>;
- seed = hash_literal<MemberT::name>::apply(seed);
- seed = schema_hash_seed<Type>::apply(seed);
- seed = hash_literal<Lit>::apply(seed);
+ seed = schema_hash_seed<MemberT>::apply(seed);
if constexpr ( (i+1) < sizeof...(T) ){
return apply_ele<i+1>(seed);