Reorder dependencies and remove dependency on mime

This commit is contained in:
Koxiaet 2020-09-09 17:03:33 +01:00
parent a1bcfd8d70
commit 45a08e9b00
2 changed files with 42 additions and 58 deletions

View File

@ -17,37 +17,38 @@ readme = "README.md"
default = ["bson", "url", "chrono-tz"] default = ["bson", "url", "chrono-tz"]
[dependencies] [dependencies]
async-graphql-parser = { path = "parser", version = "1.17.3" }
async-graphql-derive = { path = "derive", version = "1.17.21" } async-graphql-derive = { path = "derive", version = "1.17.21" }
anyhow = "1.0.26" async-graphql-parser = { path = "parser", version = "1.17.3" }
thiserror = "1.0.11"
async-trait = "0.1.30"
serde = { version = "1.0.104", features = ["derive"] }
serde_json = "1.0.48"
bytes = "0.5.4"
Inflector = "0.11.4" Inflector = "0.11.4"
anyhow = "1.0.26"
async-stream = "0.2.1"
async-trait = "0.1.30"
base64 = "0.12.0" base64 = "0.12.0"
byteorder = "1.3.4" byteorder = "1.3.4"
futures = "0.3.0" bytes = "0.5.4"
parking_lot = "0.10.0"
chrono = "0.4.10" chrono = "0.4.10"
slab = "0.4.2"
once_cell = "1.3.1"
itertools = "0.9.0"
tempfile = "3.1.0"
httparse = "1.3.4"
mime = "0.3.16"
http = "0.2.1"
fnv = "1.0.6" fnv = "1.0.6"
regex = "1.3.5" futures = "0.3.5"
tracing = "0.1.13" http = "0.2.1"
httparse = "1.3.4"
indexmap = "1.3.2" indexmap = "1.3.2"
async-stream = "0.2.1" itertools = "0.9.0"
multer = "1.2.0"
log = "0.4.8" log = "0.4.8"
multer = "1.2.2"
once_cell = "1.3.1"
parking_lot = "0.10.0"
regex = "1.3.5"
serde = { version = "1.0.104", features = ["derive"] }
serde_json = "1.0.48"
slab = "0.4.2"
spin = "0.5.2" spin = "0.5.2"
bson = { version = "1.0.0", optional = true } tempfile = "3.1.0"
thiserror = "1.0.11"
tracing = "0.1.13"
uuid = { version = "0.8.1", features = ["v4", "serde"] } uuid = { version = "0.8.1", features = ["v4", "serde"] }
bson = { version = "1.0.0", optional = true }
url = { version = "2.1.1", optional = true } url = { version = "2.1.1", optional = true }
chrono-tz = { version = "0.5.1", optional = true } chrono-tz = { version = "0.5.1", optional = true }

View File

@ -2,11 +2,12 @@ use crate::http::GQLRequest;
use crate::query::{IntoQueryBuilder, IntoQueryBuilderOpts}; use crate::query::{IntoQueryBuilder, IntoQueryBuilderOpts};
use crate::{ParseRequestError, QueryBuilder}; use crate::{ParseRequestError, QueryBuilder};
use bytes::Bytes; use bytes::Bytes;
use futures::{AsyncRead, AsyncReadExt, Stream}; use futures::{stream, AsyncRead, AsyncReadExt, Stream};
use mime::Mime;
use multer::{Constraints, Multipart, SizeLimit}; use multer::{Constraints, Multipart, SizeLimit};
use std::collections::HashMap; use std::collections::HashMap;
use std::io::{Seek, SeekFrom, Write}; use std::io::{self, Seek, SeekFrom, Write};
use std::pin::Pin;
use std::task::Poll;
impl From<multer::Error> for ParseRequestError { impl From<multer::Error> for ParseRequestError {
fn from(err: multer::Error) -> Self { fn from(err: multer::Error) -> Self {
@ -29,23 +30,10 @@ where
mut self, mut self,
opts: &IntoQueryBuilderOpts, opts: &IntoQueryBuilderOpts,
) -> std::result::Result<QueryBuilder, ParseRequestError> { ) -> std::result::Result<QueryBuilder, ParseRequestError> {
if let Some(boundary) = self if let Some(boundary) = self.0.and_then(|ct| multer::parse_boundary(ct).ok()) {
.0
.and_then(|value| value.as_ref().parse::<Mime>().ok())
.and_then(|ct| {
if ct.essence_str() == mime::MULTIPART_FORM_DATA {
ct.get_param("boundary")
.map(|boundary| boundary.to_string())
} else {
None
}
})
{
// multipart // multipart
let stream = reader_stream(self.1);
let mut multipart = Multipart::new_with_constraints( let mut multipart = Multipart::new_with_constraints(
stream, reader_stream(self.1),
boundary, boundary,
Constraints::new().size_limit({ Constraints::new().size_limit({
let mut limit = SizeLimit::new(); let mut limit = SizeLimit::new();
@ -98,14 +86,8 @@ where
} }
} }
let mut builder = match builder { let mut builder = builder.ok_or(ParseRequestError::MissingOperatorsPart)?;
Some(builder) => builder, let map = map.as_mut().ok_or(ParseRequestError::MissingMapPart)?;
None => return Err(ParseRequestError::MissingOperatorsPart),
};
let map = match &mut map {
Some(map) => map,
None => return Err(ParseRequestError::MissingMapPart),
};
for (name, filename, content_type, file) in files { for (name, filename, content_type, file) in files {
if let Some(var_paths) = map.remove(&name) { if let Some(var_paths) = map.remove(&name) {
@ -139,15 +121,16 @@ where
} }
fn reader_stream( fn reader_stream(
mut r: impl AsyncRead + Send + Unpin + 'static, mut reader: impl AsyncRead + Unpin + Send + 'static,
) -> impl Stream<Item = std::io::Result<Bytes>> + 'static { ) -> impl Stream<Item = io::Result<Bytes>> + Unpin + Send + 'static {
async_stream::try_stream! { let mut buf = [0u8; 2048];
let mut buf = [0u8; 2048];
while let size = r.read(&mut buf[..]).await? { stream::poll_fn(move |cx| {
if size == 0 { Poll::Ready(
return; match futures::ready!(Pin::new(&mut reader).poll_read(cx, &mut buf)?) {
} 0 => None,
yield Bytes::from(buf[..size].to_vec()); size => Some(Ok(Bytes::copy_from_slice(&buf[..size]))),
} },
} )
})
} }