diff options
Diffstat (limited to 'modules/codec/c++/interface.hpp')
-rw-r--r-- | modules/codec/c++/interface.hpp | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/modules/codec/c++/interface.hpp b/modules/codec/c++/interface.hpp index 59401ca..19dc145 100644 --- a/modules/codec/c++/interface.hpp +++ b/modules/codec/c++/interface.hpp @@ -1,18 +1,21 @@ #pragma once +#include <functional> + #include <forstio/error.hpp> #include "schema.hpp" #include "data.hpp" namespace saw { -template<typename SchemaFunc, typename Encode, typename Func> +template<typename SchemaFunc, typename Encode> class function; -template<typename Request, typename Response, typename Encode, typename Func> -class function<schema::Function<Request, Response>, Encode, Func> { +template<typename Request, typename Response, typename Encode> +class function<schema::Function<Request, Response>, Encode> { private: - Func func_; + std::function<data<Response, Encode>(data<Request, Encode>)> func_; public: + template<typename Func> function(Func func): func_{std::move(func)} {} @@ -22,15 +25,25 @@ public: } }; +template<typename Iface, typename Encode> +class i_interface { +public: + virtual ~i_interface() = default; + + +}; + template<typename T, typename Encode, typename... Funcs> class interface; -template<typename... Requests, typename... Responses, string_literal... Names, typename Encode, typename... Funcs> -class interface<schema::Interface<schema::Member<schema::Function<Requests, Responses>, Names>...>, Encode, Funcs...> { +template<typename... Requests, typename... Responses, string_literal... Names, typename Encode> +class interface<schema::Interface<schema::Member<schema::Function<Requests, Responses>, Names>...>, Encode> { +public: + using Schema = schema::Interface<schema::Member<schema::Function<Requests, Responses>,Names>...>; private: - std::tuple<function<schema::Function<Requests, Responses>, Encode, Funcs>...> funcs_; + std::tuple<function<schema::Function<Requests, Responses>, Encode>...> funcs_; public: - interface(function<schema::Function<Requests, Responses>, Encode, Funcs>... funcs): + interface(function<schema::Function<Requests, Responses>, Encode>... funcs): funcs_{std::move(funcs)...} {} @@ -54,12 +67,6 @@ public: > , Encode - , - typename parameter_pack_type< - parameter_key_pack_index< - Lit, Names... - >::value - , Funcs...>::type >& get(){ return std::get<parameter_key_pack_index<Lit, Names...>::value>(funcs_); } @@ -89,16 +96,16 @@ public: template<typename T, typename Encode> struct function_factory { template<typename Func> - static function<T,Encode, Func> create(Func func){ - return function<T,Encode,Func>{std::move(func)}; + static function<T,Encode> create(Func func){ + return function<T,Encode>{std::move(func)}; } }; template<typename T, typename Encode> struct interface_factory { template<typename... Func> - static interface<T,Encode, Func...> create(Func... func){ - return interface<T,Encode, Func...>{std::move(func)...}; + static interface<T,Encode> create(Func... func){ + return interface<T,Encode>{std::move(func)...}; } }; } |