Change body type of juniper_hyper functions from Body to String (#1101, #1096)

This commit is contained in:
Lukas Kalbertodt 2022-09-19 17:59:33 +02:00 committed by GitHub
parent 2b1a2a7f5d
commit e0ddeecf3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 27 deletions

View file

@ -11,6 +11,10 @@ All user visible changes to `juniper_hyper` crate will be documented in this fil
### BC Breaks ### BC Breaks
- Switched to 0.16 version of [`juniper` crate]. - Switched to 0.16 version of [`juniper` crate].
- Changed return type of all functions from `Response<Body>` to `Response<String>`. ([#1101], [#1096])
[#1096]: /../../issues/1096
[#1101]: /../../pull/1101

View file

@ -3,7 +3,7 @@ use std::{convert::Infallible, sync::Arc};
use hyper::{ use hyper::{
server::Server, server::Server,
service::{make_service_fn, service_fn}, service::{make_service_fn, service_fn},
Body, Method, Response, StatusCode, Method, Response, StatusCode,
}; };
use juniper::{ use juniper::{
tests::fixtures::starwars::schema::{Database, Query}, tests::fixtures::starwars::schema::{Database, Query},
@ -38,7 +38,7 @@ async fn main() {
juniper_hyper::graphql(root_node, ctx, req).await juniper_hyper::graphql(root_node, ctx, req).await
} }
_ => { _ => {
let mut response = Response::new(Body::empty()); let mut response = Response::new(String::new());
*response.status_mut() = StatusCode::NOT_FOUND; *response.status_mut() = StatusCode::NOT_FOUND;
response response
} }

View file

@ -17,7 +17,7 @@ pub async fn graphql_sync<CtxT, QueryT, MutationT, SubscriptionT, S>(
root_node: Arc<RootNode<'static, QueryT, MutationT, SubscriptionT, S>>, root_node: Arc<RootNode<'static, QueryT, MutationT, SubscriptionT, S>>,
context: Arc<CtxT>, context: Arc<CtxT>,
req: Request<Body>, req: Request<Body>,
) -> Response<Body> ) -> Response<String>
where where
QueryT: GraphQLType<S, Context = CtxT>, QueryT: GraphQLType<S, Context = CtxT>,
QueryT::TypeInfo: Sync, QueryT::TypeInfo: Sync,
@ -38,7 +38,7 @@ pub async fn graphql<CtxT, QueryT, MutationT, SubscriptionT, S>(
root_node: Arc<RootNode<'static, QueryT, MutationT, SubscriptionT, S>>, root_node: Arc<RootNode<'static, QueryT, MutationT, SubscriptionT, S>>,
context: Arc<CtxT>, context: Arc<CtxT>,
req: Request<Body>, req: Request<Body>,
) -> Response<Body> ) -> Response<String>
where where
QueryT: GraphQLTypeAsync<S, Context = CtxT>, QueryT: GraphQLTypeAsync<S, Context = CtxT>,
QueryT::TypeInfo: Sync, QueryT::TypeInfo: Sync,
@ -57,7 +57,7 @@ where
async fn parse_req<S: ScalarValue>( async fn parse_req<S: ScalarValue>(
req: Request<Body>, req: Request<Body>,
) -> Result<GraphQLBatchRequest<S>, Response<Body>> { ) -> Result<GraphQLBatchRequest<S>, Response<String>> {
match *req.method() { match *req.method() {
Method::GET => parse_get_req(req), Method::GET => parse_get_req(req),
Method::POST => { Method::POST => {
@ -121,32 +121,27 @@ async fn parse_post_graphql_req<S: ScalarValue>(
pub async fn graphiql( pub async fn graphiql(
graphql_endpoint: &str, graphql_endpoint: &str,
subscriptions_endpoint: Option<&str>, subscriptions_endpoint: Option<&str>,
) -> Response<Body> { ) -> Response<String> {
let mut resp = new_html_response(StatusCode::OK); let mut resp = new_html_response(StatusCode::OK);
// XXX: is the call to graphiql_source blocking? // XXX: is the call to graphiql_source blocking?
*resp.body_mut() = Body::from(juniper::http::graphiql::graphiql_source( *resp.body_mut() =
graphql_endpoint, juniper::http::graphiql::graphiql_source(graphql_endpoint, subscriptions_endpoint);
subscriptions_endpoint,
));
resp resp
} }
pub async fn playground( pub async fn playground(
graphql_endpoint: &str, graphql_endpoint: &str,
subscriptions_endpoint: Option<&str>, subscriptions_endpoint: Option<&str>,
) -> Response<Body> { ) -> Response<String> {
let mut resp = new_html_response(StatusCode::OK); let mut resp = new_html_response(StatusCode::OK);
*resp.body_mut() = Body::from(juniper::http::playground::playground_source( *resp.body_mut() =
graphql_endpoint, juniper::http::playground::playground_source(graphql_endpoint, subscriptions_endpoint);
subscriptions_endpoint,
));
resp resp
} }
fn render_error(err: GraphQLRequestError) -> Response<Body> { fn render_error(err: GraphQLRequestError) -> Response<String> {
let message = err.to_string();
let mut resp = new_response(StatusCode::BAD_REQUEST); let mut resp = new_response(StatusCode::BAD_REQUEST);
*resp.body_mut() = Body::from(message); *resp.body_mut() = err.to_string();
resp resp
} }
@ -154,7 +149,7 @@ async fn execute_request_sync<CtxT, QueryT, MutationT, SubscriptionT, S>(
root_node: Arc<RootNode<'static, QueryT, MutationT, SubscriptionT, S>>, root_node: Arc<RootNode<'static, QueryT, MutationT, SubscriptionT, S>>,
context: Arc<CtxT>, context: Arc<CtxT>,
request: GraphQLBatchRequest<S>, request: GraphQLBatchRequest<S>,
) -> Response<Body> ) -> Response<String>
where where
QueryT: GraphQLType<S, Context = CtxT>, QueryT: GraphQLType<S, Context = CtxT>,
QueryT::TypeInfo: Sync, QueryT::TypeInfo: Sync,
@ -166,7 +161,7 @@ where
S: ScalarValue + Send + Sync, S: ScalarValue + Send + Sync,
{ {
let res = request.execute_sync(&*root_node, &context); let res = request.execute_sync(&*root_node, &context);
let body = Body::from(serde_json::to_string_pretty(&res).unwrap()); let body = serde_json::to_string_pretty(&res).unwrap();
let code = if res.is_ok() { let code = if res.is_ok() {
StatusCode::OK StatusCode::OK
} else { } else {
@ -185,7 +180,7 @@ async fn execute_request<CtxT, QueryT, MutationT, SubscriptionT, S>(
root_node: Arc<RootNode<'static, QueryT, MutationT, SubscriptionT, S>>, root_node: Arc<RootNode<'static, QueryT, MutationT, SubscriptionT, S>>,
context: Arc<CtxT>, context: Arc<CtxT>,
request: GraphQLBatchRequest<S>, request: GraphQLBatchRequest<S>,
) -> Response<Body> ) -> Response<String>
where where
QueryT: GraphQLTypeAsync<S, Context = CtxT>, QueryT: GraphQLTypeAsync<S, Context = CtxT>,
QueryT::TypeInfo: Sync, QueryT::TypeInfo: Sync,
@ -197,7 +192,7 @@ where
S: ScalarValue + Send + Sync, S: ScalarValue + Send + Sync,
{ {
let res = request.execute(&*root_node, &context).await; let res = request.execute(&*root_node, &context).await;
let body = Body::from(serde_json::to_string_pretty(&res).unwrap()); let body = serde_json::to_string_pretty(&res).unwrap();
let code = if res.is_ok() { let code = if res.is_ok() {
StatusCode::OK StatusCode::OK
} else { } else {
@ -260,13 +255,13 @@ fn invalid_err(parameter_name: &str) -> GraphQLRequestError {
)) ))
} }
fn new_response(code: StatusCode) -> Response<Body> { fn new_response(code: StatusCode) -> Response<String> {
let mut r = Response::new(Body::empty()); let mut r = Response::new(String::new());
*r.status_mut() = code; *r.status_mut() = code;
r r
} }
fn new_html_response(code: StatusCode) -> Response<Body> { fn new_html_response(code: StatusCode) -> Response<String> {
let mut resp = new_response(code); let mut resp = new_response(code);
resp.headers_mut().insert( resp.headers_mut().insert(
header::CONTENT_TYPE, header::CONTENT_TYPE,
@ -313,7 +308,7 @@ mod tests {
use hyper::{ use hyper::{
server::Server, server::Server,
service::{make_service_fn, service_fn}, service::{make_service_fn, service_fn},
Body, Method, Response, StatusCode, Method, Response, StatusCode,
}; };
use juniper::{ use juniper::{
http::tests as http_tests, http::tests as http_tests,
@ -409,7 +404,7 @@ mod tests {
super::graphql(root_node, ctx, req).await super::graphql(root_node, ctx, req).await
} }
} else { } else {
let mut resp = Response::new(Body::empty()); let mut resp = Response::new(String::new());
*resp.status_mut() = StatusCode::NOT_FOUND; *resp.status_mut() = StatusCode::NOT_FOUND;
resp resp
}) })