diff options
Diffstat (limited to 'modules/codec')
-rw-r--r-- | modules/codec/c++/schema.hpp | 3 | ||||
-rw-r--r-- | modules/codec/c++/schema_hash.hpp | 20 |
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); |