Reorder dependencies and remove dependency on mime
This commit is contained in:
parent
a1bcfd8d70
commit
45a08e9b00
43
Cargo.toml
43
Cargo.toml
|
@ -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 }
|
||||||
|
|
||||||
|
|
|
@ -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]))),
|
||||||
}
|
},
|
||||||
}
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user