diff options
Diffstat (limited to 'modules/codec/c++/interface.hpp')
-rw-r--r-- | modules/codec/c++/interface.hpp | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/modules/codec/c++/interface.hpp b/modules/codec/c++/interface.hpp index e1c9a12..f31b778 100644 --- a/modules/codec/c++/interface.hpp +++ b/modules/codec/c++/interface.hpp @@ -8,44 +8,44 @@ #include "data.hpp" namespace saw { -template<typename SchemaFunc, typename Encode, typename Storage, typename Context = void_t > +template<typename SchemaFunc, typename Encode, typename Context = void_t > class function; namespace impl { -template<typename DataSchema, typename Encode, typename Storage> +template<typename DataSchema, typename Encode> struct FuncReturnTypeHelper { - using Type = data<DataSchema,Encode,Storage>; + using Type = data<DataSchema,Encode>; }; -template<typename Encode, typename Storage> -struct FuncReturnTypeHelper<schema::Void, Encode, Storage> { +template<typename Encode> +struct FuncReturnTypeHelper<schema::Void, Encode> { using Type = void; }; -template<typename Request, typename Response, typename Encode, typename Storage, typename Ctx> +template<typename Request, typename Response, typename Encode, typename Ctx> struct FuncTypeHelper { - using Type = std::function<error_or<typename FuncReturnTypeHelper<Response,Encode,Storage>::Type>(data<Request, Encode, Storage>&, Ctx)>; + using Type = std::function<error_or<typename FuncReturnTypeHelper<Response,Encode>::Type>(data<Request, Encode>&, Ctx)>; }; -template<typename Request, typename Response, typename Encode, typename Storage> -struct FuncTypeHelper<Request, Response, Encode, Storage, void_t> { - using Type = std::function<error_or<typename FuncReturnTypeHelper<Response, Encode, Storage>::Type>(data<Request, Encode, Storage>&)>; +template<typename Request, typename Response, typename Encode> +struct FuncTypeHelper<Request, Response, Encode, void_t> { + using Type = std::function<error_or<typename FuncReturnTypeHelper<Response, Encode>::Type>(data<Request, Encode>&)>; }; } -template<typename Request, typename Response, typename Encode, typename Storage, typename Context> -class function<schema::Function<Request, Response>, Encode, Storage, Context> { +template<typename Request, typename Response, typename Encode, typename Context> +class function<schema::Function<Request, Response>, Encode, Context> { private: - typename impl::FuncTypeHelper<Request, Response, Encode, Storage, Context>::Type func_; - using ResponseDataType = typename impl::FuncReturnTypeHelper<Response, Encode, Storage>::Type; + typename impl::FuncTypeHelper<Request, Response, Encode, Context>::Type func_; + using ResponseDataType = typename impl::FuncReturnTypeHelper<Response, Encode>::Type; public: template<typename Func> function(Func func): func_{std::move(func)} {} - error_or<ResponseDataType> call(data<Request, Encode, Storage>& req, Context ctx = {}){ + error_or<ResponseDataType> call(data<Request, Encode>& req, Context ctx = {}){ if constexpr (std::is_same_v<Context, void_t>){ (void) ctx; return func_(req); @@ -55,17 +55,17 @@ public: } }; -template<typename T, typename Encode, typename Storage = storage::Default, typename Context = void_t > +template<typename T, typename Encode, typename Context = void_t > class interface; -template<typename... Requests, typename... Responses, string_literal... Names, typename Encode, typename Storage, typename Context> -class interface<schema::Interface<schema::Member<schema::Function<Requests, Responses>, Names>...>, Encode, Storage, Context> { +template<typename... Requests, typename... Responses, string_literal... Names, typename Encode, typename Context> +class interface<schema::Interface<schema::Member<schema::Function<Requests, Responses>, Names>...>, Encode, Context> { public: using Schema = schema::Interface<schema::Member<schema::Function<Requests, Responses>,Names>...>; private: - std::tuple<function<schema::Function<Requests, Responses>, Encode, Storage, Context>...> funcs_; + std::tuple<function<schema::Function<Requests, Responses>, Encode, Context>...> funcs_; public: - interface(function<schema::Function<Requests, Responses>, Encode, Storage, Context>... funcs): + interface(function<schema::Function<Requests, Responses>, Encode, Context>... funcs): funcs_{std::move(funcs)...} {} @@ -88,7 +88,6 @@ public: , Responses...>::type > , Encode - , Storage , Context >& get(){ return std::get<parameter_key_pack_index<Lit, Names...>::value>(funcs_); @@ -102,14 +101,14 @@ public: Lit, Names... >::value , Responses...>::type - , Encode, Storage>::Type > call( + , Encode>::Type > call( data< typename parameter_pack_type< parameter_key_pack_index< Lit, Names... >::value , Requests...>::type - , Encode, Storage>& req, + , Encode>& req, Context ctx = {} ){ if constexpr (std::is_same_v<Context, void_t>) { @@ -121,19 +120,19 @@ public: } }; -template<typename T, typename Encode, typename Storage = storage::Default, typename Context = void_t> +template<typename T, typename Encode, typename Context = void_t> struct function_factory { template<typename Func> - static function<T,Encode, Storage, Context> create(Func func){ - return function<T,Encode, Storage, Context> {std::move(func)}; + static function<T,Encode, Context> create(Func func){ + return function<T,Encode, Context> {std::move(func)}; } }; -template<typename T, typename Encode, typename Storage = storage::Default, typename Context = void_t> +template<typename T, typename Encode, typename Context = void_t> struct interface_factory { template<typename... Func> - static interface<T,Encode,Storage,Context> create(Func... func){ - return interface<T,Encode,Storage,Context>{std::move(func)...}; + static interface<T,Encode,Context> create(Func... func){ + return interface<T,Encode,Context>{std::move(func)...}; } }; } |