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"]
[dependencies]
async-graphql-parser = { path = "parser", version = "1.17.3" }
async-graphql-derive = { path = "derive", version = "1.17.21" }
anyhow = "1.0.26"
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"
async-graphql-parser = { path = "parser", version = "1.17.3" }
Inflector = "0.11.4"
anyhow = "1.0.26"
async-stream = "0.2.1"
async-trait = "0.1.30"
base64 = "0.12.0"
byteorder = "1.3.4"
futures = "0.3.0"
parking_lot = "0.10.0"
bytes = "0.5.4"
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"
regex = "1.3.5"
tracing = "0.1.13"
futures = "0.3.5"
http = "0.2.1"
httparse = "1.3.4"
indexmap = "1.3.2"
async-stream = "0.2.1"
multer = "1.2.0"
itertools = "0.9.0"
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"
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"] }
bson = { version = "1.0.0", optional = true }
url = { version = "2.1.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::{ParseRequestError, QueryBuilder};
use bytes::Bytes;
use futures::{AsyncRead, AsyncReadExt, Stream};
use mime::Mime;
use futures::{stream, AsyncRead, AsyncReadExt, Stream};
use multer::{Constraints, Multipart, SizeLimit};
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 {
fn from(err: multer::Error) -> Self {
@ -29,23 +30,10 @@ where
mut self,
opts: &IntoQueryBuilderOpts,
) -> std::result::Result<QueryBuilder, ParseRequestError> {
if let Some(boundary) = self
.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
}
})
{
if let Some(boundary) = self.0.and_then(|ct| multer::parse_boundary(ct).ok()) {
// multipart
let stream = reader_stream(self.1);
let mut multipart = Multipart::new_with_constraints(
stream,
reader_stream(self.1),
boundary,
Constraints::new().size_limit({
let mut limit = SizeLimit::new();
@ -98,14 +86,8 @@ where
}
}
let mut builder = match builder {
Some(builder) => builder,
None => return Err(ParseRequestError::MissingOperatorsPart),
};
let map = match &mut map {
Some(map) => map,
None => return Err(ParseRequestError::MissingMapPart),
};
let mut builder = builder.ok_or(ParseRequestError::MissingOperatorsPart)?;
let map = map.as_mut().ok_or(ParseRequestError::MissingMapPart)?;
for (name, filename, content_type, file) in files {
if let Some(var_paths) = map.remove(&name) {
@ -139,15 +121,16 @@ where
}
fn reader_stream(
mut r: impl AsyncRead + Send + Unpin + 'static,
) -> impl Stream<Item = std::io::Result<Bytes>> + 'static {
async_stream::try_stream! {
let mut buf = [0u8; 2048];
while let size = r.read(&mut buf[..]).await? {
if size == 0 {
return;
}
yield Bytes::from(buf[..size].to_vec());
}
}
mut reader: impl AsyncRead + Unpin + Send + 'static,
) -> impl Stream<Item = io::Result<Bytes>> + Unpin + Send + 'static {
let mut buf = [0u8; 2048];
stream::poll_fn(move |cx| {
Poll::Ready(
match futures::ready!(Pin::new(&mut reader).poll_read(cx, &mut buf)?) {
0 => None,
size => Some(Ok(Bytes::copy_from_slice(&buf[..size]))),
},
)
})
}