@@ -2031,7 +2031,7 @@ AwaitableResolver Request::visit(RequestResolveParams params) const
2031
2031
}
2032
2032
}
2033
2033
2034
- AwaitableSubscribe Request::subscribe (RequestSubscribeParams params)
2034
+ AwaitableSubscribe Request::subscribe (RequestSubscribeParams params, bool deliver )
2035
2035
{
2036
2036
const auto spThis = shared_from_this ();
2037
2037
const auto launch = std::move (params.launch );
@@ -2065,20 +2065,20 @@ AwaitableSubscribe Request::subscribe(RequestSubscribeParams params)
2065
2065
2066
2066
lock.unlock ();
2067
2067
2068
+ ResolverResult document {};
2069
+
2068
2070
try
2069
2071
{
2070
2072
co_await launch;
2071
2073
2072
- auto errors =
2073
- std::move ((co_await optionalOrDefaultSubscription->resolve (selectionSetParams,
2074
- registration->selection ,
2075
- registration->data ->fragments ,
2076
- registration->data ->variables ))
2077
- .errors );
2074
+ document = co_await optionalOrDefaultSubscription->resolve (selectionSetParams,
2075
+ registration->selection ,
2076
+ registration->data ->fragments ,
2077
+ registration->data ->variables );
2078
2078
2079
- if (!errors.empty ())
2079
+ if (!document. errors .empty ())
2080
2080
{
2081
- throw schema_exception { std::move (errors) };
2081
+ throw schema_exception { std::move (document. errors ) };
2082
2082
}
2083
2083
}
2084
2084
catch (...)
@@ -2089,6 +2089,23 @@ AwaitableSubscribe Request::subscribe(RequestSubscribeParams params)
2089
2089
spThis->removeSubscription (key);
2090
2090
throw ;
2091
2091
}
2092
+
2093
+ if (deliver){
2094
+ std::visit (
2095
+ [result = std::move (document)](const auto & callback) mutable {
2096
+ using callback_type = std::decay_t <decltype (callback)>;
2097
+
2098
+ if constexpr (std::is_same_v<callback_type, SubscriptionCallback>)
2099
+ {
2100
+ callback (std::move (result).document ());
2101
+ }
2102
+ else if constexpr (std::is_same_v<callback_type, SubscriptionVisitor>)
2103
+ {
2104
+ callback (std::move (result));
2105
+ }
2106
+ },
2107
+ registration->callback );
2108
+ }
2092
2109
}
2093
2110
2094
2111
co_return key;
0 commit comments