WebSocket is now generic in graphql_subscription_upgrade functions.

This commit is contained in:
BratSinot 2021-05-31 13:55:08 +03:00
parent d82eb01cfd
commit 2540e87158

View File

@ -5,7 +5,6 @@ use async_graphql::http::{WebSocketProtocols, WsMessage};
use async_graphql::{Data, ObjectType, Result, Schema, SubscriptionType}; use async_graphql::{Data, ObjectType, Result, Schema, SubscriptionType};
use futures_util::{future, StreamExt}; use futures_util::{future, StreamExt};
use warp::filters::ws; use warp::filters::ws;
use warp::ws::WebSocket;
use warp::{Filter, Rejection, Reply}; use warp::{Filter, Rejection, Reply};
/// GraphQL subscription filter /// GraphQL subscription filter
@ -165,14 +164,15 @@ pub fn graphql_protocol() -> impl Filter<Extract = (WebSocketProtocols,), Error
/// warp::serve(filter).run(([0, 0, 0, 0], 8000)).await; /// warp::serve(filter).run(([0, 0, 0, 0], 8000)).await;
/// }); /// });
/// ``` /// ```
pub async fn graphql_subscription_upgrade<Query, Mutation, Subscription>( pub async fn graphql_subscription_upgrade<Query, Mutation, Subscription, S>(
websocket: WebSocket, websocket: S,
protocol: WebSocketProtocols, protocol: WebSocketProtocols,
schema: Schema<Query, Mutation, Subscription>, schema: Schema<Query, Mutation, Subscription>,
) where ) where
Query: ObjectType + 'static, Query: ObjectType + 'static,
Mutation: ObjectType + 'static, Mutation: ObjectType + 'static,
Subscription: SubscriptionType + 'static, Subscription: SubscriptionType + 'static,
S: futures_util::Stream<Item = Result<warp::ws::Message, warp::Error>> + futures_util::Sink<warp::ws::Message>,
{ {
graphql_subscription_upgrade_with_data(websocket, protocol, schema, |_| async { graphql_subscription_upgrade_with_data(websocket, protocol, schema, |_| async {
Ok(Default::default()) Ok(Default::default())
@ -183,8 +183,8 @@ pub async fn graphql_subscription_upgrade<Query, Mutation, Subscription>(
/// Handle the WebSocket subscription. /// Handle the WebSocket subscription.
/// ///
/// Specifies that a function converts the init payload to data. /// Specifies that a function converts the init payload to data.
pub async fn graphql_subscription_upgrade_with_data<Query, Mutation, Subscription, F, R>( pub async fn graphql_subscription_upgrade_with_data<Query, Mutation, Subscription, F, R, S>(
websocket: WebSocket, websocket: S,
protocol: WebSocketProtocols, protocol: WebSocketProtocols,
schema: Schema<Query, Mutation, Subscription>, schema: Schema<Query, Mutation, Subscription>,
initializer: F, initializer: F,
@ -194,6 +194,7 @@ pub async fn graphql_subscription_upgrade_with_data<Query, Mutation, Subscriptio
Subscription: SubscriptionType + 'static, Subscription: SubscriptionType + 'static,
F: FnOnce(serde_json::Value) -> R + Clone + Send + 'static, F: FnOnce(serde_json::Value) -> R + Clone + Send + 'static,
R: Future<Output = Result<Data>> + Send + 'static, R: Future<Output = Result<Data>> + Send + 'static,
S: futures_util::Stream<Item = Result<warp::ws::Message, warp::Error>> + futures_util::Sink<warp::ws::Message>,
{ {
let (ws_sender, ws_receiver) = websocket.split(); let (ws_sender, ws_receiver) = websocket.split();
let _ = async_graphql::http::WebSocket::with_data( let _ = async_graphql::http::WebSocket::with_data(