Remove useless `ParseQueryFut` type

This commit is contained in:
Sunli 2022-04-15 15:31:07 +08:00
parent 22d61df4d7
commit 2f0bcaa8ee
2 changed files with 10 additions and 32 deletions

View File

@ -111,6 +111,6 @@ pub async fn receive_batch_cbor(body: impl AsyncRead) -> Result<BatchRequest, Pa
body.read_to_end(&mut data)
.await
.map_err(ParseRequestError::Io)?;
Ok(serde_cbor::from_slice::<BatchRequest>(&data)
.map_err(|e| ParseRequestError::InvalidRequest(Box::new(e)))?)
serde_cbor::from_slice::<BatchRequest>(&data)
.map_err(|e| ParseRequestError::InvalidRequest(Box::new(e)))
}

View File

@ -1,6 +1,3 @@
use core::future::Future;
use core::pin::Pin;
use core::task;
use std::any::Any;
use std::collections::HashMap;
use std::ops::Deref;
@ -13,9 +10,7 @@ use crate::context::{Data, QueryEnvInner};
use crate::custom_directive::CustomDirectiveFactory;
use crate::extensions::{ExtensionFactory, Extensions};
use crate::model::__DirectiveLocation;
use crate::parser::types::{
Directive, DocumentOperations, ExecutableDocument, OperationType, Selection, SelectionSet,
};
use crate::parser::types::{Directive, DocumentOperations, OperationType, Selection, SelectionSet};
use crate::parser::{parse_query, Positioned};
use crate::registry::{MetaDirective, MetaInputValue, Registry};
use crate::resolver_utils::{resolve_container, resolve_container_serial};
@ -27,26 +22,6 @@ use crate::{
QueryEnv, Request, Response, ServerError, SubscriptionType, Variables, ID,
};
pub struct ParseQueryFut<'a> {
query: &'a str,
parsed: Option<ExecutableDocument>,
}
impl<'a> Future for ParseQueryFut<'a> {
type Output = Result<ExecutableDocument, ServerError>;
#[inline(always)]
fn poll(self: Pin<&mut Self>, _: &mut task::Context<'_>) -> task::Poll<Self::Output> {
let this = Pin::into_inner(self);
let result = match this.parsed.take() {
Some(document) => Ok(document),
None => parse_query(this.query).map_err(Into::into),
};
task::Poll::Ready(result)
}
}
/// Schema builder
pub struct SchemaBuilder<Query, Mutation, Subscription> {
validation_mode: ValidationMode,
@ -455,13 +430,16 @@ where
let mut request = extensions.prepare_request(request).await?;
let mut document = {
let query = &request.query;
let fut_parse = ParseQueryFut {
query,
parsed: request.parsed_query.take(),
let parsed_doc = request.parsed_query.take();
let fut_parse = async move {
match parsed_doc {
Some(parsed_doc) => Ok(parsed_doc),
None => parse_query(query).map_err(Into::into),
}
};
futures_util::pin_mut!(fut_parse);
extensions
.parse_query(&query, &request.variables, &mut fut_parse)
.parse_query(query, &request.variables, &mut fut_parse)
.await?
};