diff options
author | Claudius Holeksa <mail@keldu.de> | 2023-04-29 18:03:24 +0200 |
---|---|---|
committer | Claudius Holeksa <mail@keldu.de> | 2023-04-29 18:03:24 +0200 |
commit | 937e67ff5ae9e770367bfee3100154b6a6957ce7 (patch) | |
tree | c09be3b6929ce6fd533c83564a89fe523be7a46f /forstio/codec/schema.h | |
parent | 4e18f3798465ae952e15a2620177421d8b8c1f00 (diff) |
Added codec and ammended async build
Diffstat (limited to 'forstio/codec/schema.h')
-rw-r--r-- | forstio/codec/schema.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/forstio/codec/schema.h b/forstio/codec/schema.h new file mode 100644 index 0000000..915e4eb --- /dev/null +++ b/forstio/codec/schema.h @@ -0,0 +1,77 @@ +#pragma once + +#include <forstio/common.h> +#include <forstio/string_literal.h> + +namespace saw { +namespace schema { +// NOLINTBEGIN +template <typename T, string_literal Literal> struct NamedMember {}; + +template <typename... T> struct Struct { + static_assert( + always_false<T...>, + "This schema template doesn't support this type of template argument"); +}; + +template <typename... V, string_literal... K> +struct Struct<NamedMember<V, K>...> {}; + +template <typename... T> struct Union { + static_assert( + always_false<T...>, + "This schema template doesn't support this type of template argument"); +}; + +template <typename... V, string_literal... K> +struct Union<NamedMember<V, K>...> {}; + +template <typename T> struct Array {}; + +template <typename... T> struct Tuple {}; + +struct String {}; + +struct SignedInteger {}; +struct UnsignedInteger {}; +struct FloatingPoint {}; + +template <class T, size_t N> struct Primitive { + static_assert(((std::is_same_v<T, SignedInteger> || + std::is_same_v<T, UnsignedInteger>)&&(N == 1 || N == 2 || + N == 4 || N == 8)) || + (std::is_same_v<T, FloatingPoint> && (N == 4 || N == 8)), + "Primitive Type is not supported"); +}; + +using Int8 = Primitive<SignedInteger, 1>; +using Int16 = Primitive<SignedInteger, 2>; +using Int32 = Primitive<SignedInteger, 4>; +using Int64 = Primitive<SignedInteger, 8>; + +using UInt8 = Primitive<UnsignedInteger, 1>; +using UInt16 = Primitive<UnsignedInteger, 2>; +using UInt32 = Primitive<UnsignedInteger, 4>; +using UInt64 = Primitive<UnsignedInteger, 8>; + +using Float32 = Primitive<FloatingPoint, 4>; +using Float64 = Primitive<FloatingPoint, 8>; + +/** + * Classes enabling Rpc calls + */ +template <class Request, class Response, string_literal Literal> +struct Function {}; + +template <class... T> struct Interface { + static_assert( + always_false<T...>, + "This schema template doesn't support this type of template argument"); +}; + +template <class... Request, class... Response, string_literal... Literal> +struct Interface<Function<Request, Response, Literal>...> {}; + +// NOLINTEND +} // namespace schema +} // namespace saw |