summaryrefslogtreecommitdiff
path: root/modules/codec/c++/interface.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/codec/c++/interface.hpp')
-rw-r--r--modules/codec/c++/interface.hpp43
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)...};
}
};
}