Compare commits

..

No commits in common. "d0fa09eb839728d2ba224423ad36dfa85c4a97f8" and "1a980855f0478065d52454bc19271e943c0cbc9a" have entirely different histories.

6 changed files with 51 additions and 31 deletions

13
Cargo.lock generated
View File

@ -1082,9 +1082,9 @@ dependencies = [
[[package]]
name = "darling"
version = "0.23.0"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
dependencies = [
"darling_core",
"darling_macro",
@ -1092,10 +1092,11 @@ dependencies = [
[[package]]
name = "darling_core"
version = "0.23.0"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0"
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
@ -1105,9 +1106,9 @@ dependencies = [
[[package]]
name = "darling_macro"
version = "0.23.0"
version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",

View File

@ -366,9 +366,10 @@ where
io.poll_flush(cx)
}
fn enter_linger(flags: &mut Flags) {
flags.remove(Flags::KEEP_ALIVE);
flags.insert(Flags::LINGER | Flags::FINISHED);
fn enter_linger(mut self: Pin<&mut Self>) {
let this = self.as_mut().project();
this.flags.remove(Flags::KEEP_ALIVE);
this.flags.insert(Flags::LINGER | Flags::FINISHED);
}
fn ensure_linger_timer(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> bool {
@ -463,19 +464,23 @@ where
let size = self.as_mut().send_response_inner(res, &body)?;
match size {
BodySize::None | BodySize::Sized(0) => {
let mut this = self.as_mut().project();
let this = self.as_mut().project();
if close_after_response {
if this.config.client_disconnect_deadline().is_some() {
Self::enter_linger(this.flags);
drop(this);
self.as_mut().enter_linger();
} else {
this.flags.insert(Flags::SHUTDOWN | Flags::FINISHED);
self.as_mut()
.project()
.flags
.insert(Flags::SHUTDOWN | Flags::FINISHED);
}
} else {
this.flags.insert(Flags::FINISHED);
}
this.state.set(State::None);
self.as_mut().project().state.set(State::None);
}
_ => self
.as_mut()
@ -504,19 +509,23 @@ where
let size = self.as_mut().send_response_inner(res, &body)?;
match size {
BodySize::None | BodySize::Sized(0) => {
let mut this = self.as_mut().project();
let this = self.as_mut().project();
if close_after_response {
if this.config.client_disconnect_deadline().is_some() {
Self::enter_linger(this.flags);
drop(this);
self.as_mut().enter_linger();
} else {
this.flags.insert(Flags::SHUTDOWN | Flags::FINISHED);
self.as_mut()
.project()
.flags
.insert(Flags::SHUTDOWN | Flags::FINISHED);
}
} else {
this.flags.insert(Flags::FINISHED);
}
this.state.set(State::None);
self.as_mut().project().state.set(State::None);
}
_ => self
.as_mut()
@ -637,9 +646,13 @@ where
if not_pipelined && close_after_response {
if this.config.client_disconnect_deadline().is_some() {
Self::enter_linger(this.flags);
drop(this);
self.as_mut().enter_linger();
} else {
this.flags.insert(Flags::SHUTDOWN | Flags::FINISHED);
self.as_mut()
.project()
.flags
.insert(Flags::SHUTDOWN | Flags::FINISHED);
}
} else {
this.flags.insert(Flags::FINISHED);
@ -695,9 +708,13 @@ where
if not_pipelined && close_after_response {
if this.config.client_disconnect_deadline().is_some() {
Self::enter_linger(this.flags);
drop(this);
self.as_mut().enter_linger();
} else {
this.flags.insert(Flags::SHUTDOWN | Flags::FINISHED);
self.as_mut()
.project()
.flags
.insert(Flags::SHUTDOWN | Flags::FINISHED);
}
} else {
this.flags.insert(Flags::FINISHED);

View File

@ -5,7 +5,6 @@
## 0.8.0
- Minimum supported Rust version (MSRV) is now 1.88.
- Update `darling` dependency to `0.23`.
## 0.7.0

View File

@ -18,7 +18,7 @@ proc-macro = true
[dependencies]
bytesize = "2"
darling = "0.23"
darling = "0.20"
proc-macro2 = "1"
quote = "1"
syn = "2"

View File

@ -1,4 +1,4 @@
error: Unknown value: `no`. Available values: `deny`, `ignore`, `replace`
error: Unknown literal value `no`
--> tests/trybuild/deny-parse-fail.rs:4:31
|
4 | #[multipart(duplicate_field = "no")]

View File

@ -513,17 +513,20 @@ pub(crate) fn with_methods(input: TokenStream) -> TokenStream {
Err(err) => return input_and_compile_error(input, err),
};
let mut methods = Vec::new();
let (methods, others) = ast
.attrs
.into_iter()
.map(|attr| match MethodType::from_path(attr.path()) {
Ok(method) => Ok((method, attr)),
Err(_) => Err(attr),
})
.partition::<Vec<_>, _>(Result::is_ok);
for attr in std::mem::take(&mut ast.attrs) {
match MethodType::from_path(attr.path()) {
Ok(method) => methods.push((method, attr)),
Err(_) => ast.attrs.push(attr),
}
}
ast.attrs = others.into_iter().map(Result::unwrap_err).collect();
let methods = match methods
.into_iter()
.map(Result::unwrap)
.map(|(method, attr)| {
attr.parse_args()
.and_then(|args| Args::new(args, Some(method)))