update async-graphql-actix-web

This commit is contained in:
sunli 2020-04-01 17:15:18 +08:00
parent b373e1397d
commit 1d6a892b94
2 changed files with 14 additions and 23 deletions

View File

@ -51,5 +51,5 @@ mime = "0.3.16"
[workspace] [workspace]
members = [ members = [
"async-graphql-derive", "async-graphql-derive",
# "async-graphql-actix-web" "async-graphql-actix-web"
] ]

View File

@ -26,8 +26,8 @@ use std::sync::Arc;
type BoxOnRequestFn<Query, Mutation, Subscription> = Arc< type BoxOnRequestFn<Query, Mutation, Subscription> = Arc<
dyn for<'a> Fn( dyn for<'a> Fn(
&HttpRequest, &HttpRequest,
QueryBuilder<'a, Query, Mutation, Subscription>, QueryBuilder<Query, Mutation, Subscription>,
) -> QueryBuilder<'a, Query, Mutation, Subscription>, ) -> QueryBuilder<Query, Mutation, Subscription>,
>; >;
type BoxOnConnectFn<Query, Mutation, Subscription> = Arc< type BoxOnConnectFn<Query, Mutation, Subscription> = Arc<
@ -109,8 +109,8 @@ where
pub fn on_request< pub fn on_request<
F: for<'a> Fn( F: for<'a> Fn(
&HttpRequest, &HttpRequest,
QueryBuilder<'a, Query, Mutation, Subscription>, QueryBuilder<Query, Mutation, Subscription>,
) -> QueryBuilder<'a, Query, Mutation, Subscription> ) -> QueryBuilder<Query, Mutation, Subscription>
+ 'static, + 'static,
>( >(
self, self,
@ -230,7 +230,7 @@ where
let mut multipart = Multipart::from_request(&req, &mut payload.0).await?; let mut multipart = Multipart::from_request(&req, &mut payload.0).await?;
// read operators // read operators
let mut gql_request = { let gql_request = {
let data = read_multipart(&mut multipart, "operations").await?; let data = read_multipart(&mut multipart, "operations").await?;
serde_json::from_slice::<GQLRequest>(&data) serde_json::from_slice::<GQLRequest>(&data)
.map_err(actix_web::error::ErrorBadRequest)? .map_err(actix_web::error::ErrorBadRequest)?
@ -243,7 +243,7 @@ where
.map_err(actix_web::error::ErrorBadRequest)? .map_err(actix_web::error::ErrorBadRequest)?
}; };
let mut builder = match gql_request.builder(schema) { let mut builder = match gql_request.into_query_builder(schema).await {
Ok(builder) => builder, Ok(builder) => builder,
Err(err) => return Ok(web::Json(GQLResponse(Err(err))).respond_to(&req).await?), Err(err) => return Ok(web::Json(GQLResponse(Err(err))).respond_to(&req).await?),
}; };
@ -252,12 +252,7 @@ where
builder = on_request(&req, builder); builder = on_request(&req, builder);
} }
let mut prepared = match builder.prepare() { if !builder.is_upload() {
Ok(prepared) => prepared,
Err(err) => return Ok(web::Json(GQLResponse(Err(err))).respond_to(&req).await?),
};
if !prepared.is_upload() {
return Err(actix_web::error::ErrorBadRequest( return Err(actix_web::error::ErrorBadRequest(
"It's not an upload operation", "It's not an upload operation",
)); ));
@ -289,7 +284,7 @@ where
let data = data.freeze(); let data = data.freeze();
for var_path in var_paths { for var_path in var_paths {
prepared.set_upload( builder.set_upload(
&var_path, &var_path,
filename, filename,
Some(&content_type), Some(&content_type),
@ -317,26 +312,22 @@ where
return Err(actix_web::error::ErrorBadRequest("missing files")); return Err(actix_web::error::ErrorBadRequest("missing files"));
} }
Ok(web::Json(GQLResponse(prepared.execute().await)) Ok(web::Json(GQLResponse(builder.execute().await))
.respond_to(&req) .respond_to(&req)
.await?) .await?)
} else if ct.essence_str() == mime::APPLICATION_JSON { } else if ct.essence_str() == mime::APPLICATION_JSON {
let mut gql_request = web::Json::<GQLRequest>::from_request(&req, &mut payload.0) let gql_request = web::Json::<GQLRequest>::from_request(&req, &mut payload.0)
.await? .await?
.into_inner(); .into_inner();
let mut builder = match gql_request.builder(schema) { let mut builder = match gql_request.into_query_builder(schema).await {
Ok(builder) => builder, Ok(builder) => builder,
Err(err) => return Ok(web::Json(GQLResponse(Err(err))).respond_to(&req).await?), Err(err) => return Ok(web::Json(GQLResponse(Err(err))).respond_to(&req).await?),
}; };
if let Some(on_request) = on_request { if let Some(on_request) = on_request {
builder = on_request(&req, builder); builder = on_request(&req, builder);
} }
let prepared = match builder.prepare() { let mut cache_control = builder.cache_control().value();
Ok(prepared) => prepared, let gql_resp = builder.execute().await;
Err(err) => return Ok(web::Json(GQLResponse(Err(err))).respond_to(&req).await?),
};
let mut cache_control = prepared.cache_control().value();
let gql_resp = prepared.execute().await;
if gql_resp.is_err() { if gql_resp.is_err() {
cache_control = None; cache_control = None;
} }