summaryrefslogtreecommitdiff
path: root/modules/codec/c++
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2024-05-15 13:36:15 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2024-05-15 13:36:15 +0200
commit059dc4308ac731d2b3c324166d87b8d527b9d217 (patch)
treecbcff7b470139407ac20a556620ef92d03c9bad7 /modules/codec/c++
parent1fea63acc752aa09bc6fc3d05b5b69d699202b60 (diff)
Fixed compilation of attached ctx data
Diffstat (limited to 'modules/codec/c++')
-rw-r--r--modules/codec/c++/interface.hpp35
1 files changed, 21 insertions, 14 deletions
diff --git a/modules/codec/c++/interface.hpp b/modules/codec/c++/interface.hpp
index f77c05f..d6d02a3 100644
--- a/modules/codec/c++/interface.hpp
+++ b/modules/codec/c++/interface.hpp
@@ -35,6 +35,7 @@ public:
error_or<data<Response, Encode>> call(data<Request, Encode> req, Context ctx = {}){
if constexpr (std::is_same_v<Context, void_t>){
+ (void) ctx;
return func_(std::move(req));
} else {
return func_(std::move(req), ctx);
@@ -50,17 +51,17 @@ public:
};
-template<typename T, typename Encode, typename... Funcs>
+template<typename T, typename Encode, typename Context = void_t >
class interface;
-template<typename... Requests, typename... Responses, string_literal... Names, typename Encode>
-class interface<schema::Interface<schema::Member<schema::Function<Requests, Responses>, Names>...>, Encode> {
+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>...> funcs_;
+ std::tuple<function<schema::Function<Requests, Responses>, Encode, Context>...> funcs_;
public:
- interface(function<schema::Function<Requests, Responses>, Encode>... funcs):
+ interface(function<schema::Function<Requests, Responses>, Encode, Context>... funcs):
funcs_{std::move(funcs)...}
{}
@@ -84,6 +85,7 @@ public:
>
,
Encode
+ , Context
>& get(){
return std::get<parameter_key_pack_index<Lit, Names...>::value>(funcs_);
}
@@ -103,26 +105,31 @@ public:
Lit, Names...
>::value
, Requests...>::type
- , Encode> req
+ , Encode> req,
+ Context ctx = {}
){
- return get<Lit>().call(std::move(req));
+ if constexpr (std::is_same_v<Context, void_t>) {
+ (void) ctx;
+ return get<Lit>().call(std::move(req));
+ }else{
+ return get<Lit>().call(std::move(req), ctx);
+ }
}
-
};
-template<typename T, typename Encode>
+template<typename T, typename Encode, typename Context = void_t>
struct function_factory {
template<typename Func>
- static function<T,Encode> create(Func func){
- return function<T,Encode>{std::move(func)};
+ static function<T,Encode, Context> create(Func func){
+ return function<T,Encode,Context> {std::move(func)};
}
};
-template<typename T, typename Encode>
+template<typename T, typename Encode, typename Context = void_t>
struct interface_factory {
template<typename... Func>
- static interface<T,Encode> create(Func... func){
- return interface<T,Encode>{std::move(func)...};
+ static interface<T,Encode,Context> create(Func... func){
+ return interface<T,Encode,Context>{std::move(func)...};
}
};
}