mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-25 13:57:55 +00:00
Eliminate special case on empty string passed to borrow=""
This commit is contained in:
@@ -7,9 +7,9 @@ use std::collections::BTreeSet;
|
|||||||
use syn;
|
use syn;
|
||||||
use syn::parse::ParseStream;
|
use syn::parse::ParseStream;
|
||||||
use syn::punctuated::Punctuated;
|
use syn::punctuated::Punctuated;
|
||||||
use syn::Ident;
|
|
||||||
use syn::Meta::{List, NameValue, Path};
|
use syn::Meta::{List, NameValue, Path};
|
||||||
use syn::NestedMeta::{Lit, Meta};
|
use syn::NestedMeta::{Lit, Meta};
|
||||||
|
use syn::{Ident, Lifetime};
|
||||||
|
|
||||||
// This module handles parsing of `#[serde(...)]` attributes. The entrypoints
|
// This module handles parsing of `#[serde(...)]` attributes. The entrypoints
|
||||||
// are `attr::Container::from_ast`, `attr::Variant::from_ast`, and
|
// are `attr::Container::from_ast`, `attr::Variant::from_ast`, and
|
||||||
@@ -1657,21 +1657,27 @@ fn parse_lit_into_lifetimes(
|
|||||||
lit: &syn::Lit,
|
lit: &syn::Lit,
|
||||||
) -> Result<BTreeSet<syn::Lifetime>, ()> {
|
) -> Result<BTreeSet<syn::Lifetime>, ()> {
|
||||||
let string = get_lit_str(cx, attr_name, lit)?;
|
let string = get_lit_str(cx, attr_name, lit)?;
|
||||||
if string.value().is_empty() {
|
|
||||||
cx.error_spanned_by(lit, "at least one lifetime must be borrowed");
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Ok(lifetimes) =
|
if let Ok(lifetimes) = string.parse_with(|input: ParseStream| {
|
||||||
string.parse_with(Punctuated::<syn::Lifetime, Token![+]>::parse_separated_nonempty)
|
|
||||||
{
|
|
||||||
let mut set = BTreeSet::new();
|
let mut set = BTreeSet::new();
|
||||||
for lifetime in lifetimes {
|
while !input.is_empty() {
|
||||||
|
let lifetime: Lifetime = input.parse()?;
|
||||||
if !set.insert(lifetime.clone()) {
|
if !set.insert(lifetime.clone()) {
|
||||||
cx.error_spanned_by(lit, format!("duplicate borrowed lifetime `{}`", lifetime));
|
cx.error_spanned_by(lit, format!("duplicate borrowed lifetime `{}`", lifetime));
|
||||||
}
|
}
|
||||||
|
if input.is_empty() {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return Ok(set);
|
input.parse::<Token![+]>()?;
|
||||||
|
}
|
||||||
|
Ok(set)
|
||||||
|
}) {
|
||||||
|
return if lifetimes.is_empty() {
|
||||||
|
cx.error_spanned_by(lit, "at least one lifetime must be borrowed");
|
||||||
|
Err(())
|
||||||
|
} else {
|
||||||
|
Ok(lifetimes)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
cx.error_spanned_by(
|
cx.error_spanned_by(
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ error: at least one lifetime must be borrowed
|
|||||||
5 | #[serde(borrow = "")]
|
5 | #[serde(borrow = "")]
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: failed to parse borrowed lifetimes: " "
|
error: at least one lifetime must be borrowed
|
||||||
--> tests/ui/borrow/empty_lifetimes.rs:7:22
|
--> tests/ui/borrow/empty_lifetimes.rs:7:22
|
||||||
|
|
|
|
||||||
7 | #[serde(borrow = " ")]
|
7 | #[serde(borrow = " ")]
|
||||||
|
|||||||
Reference in New Issue
Block a user