77 lines
2.0 KiB
C++
77 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "common.h"
|
|
#include "string_literal.h"
|
|
|
|
namespace saw {
|
|
namespace schema {
|
|
|
|
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>...> {};
|
|
|
|
} // namespace schema
|
|
} // namespace saw
|