mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-30 21:18:04 +00:00
Improve overall quality of compile_error! errors
Also updates UI tests.
This commit is contained in:
+10
-4
@@ -13,9 +13,12 @@ use try;
|
||||
|
||||
use std::collections::BTreeSet;
|
||||
|
||||
pub fn expand_derive_deserialize(input: &syn::DeriveInput) -> Result<TokenStream, String> {
|
||||
pub fn expand_derive_deserialize(input: &syn::DeriveInput) -> Result<TokenStream, Vec<syn::Error>> {
|
||||
let ctxt = Ctxt::new();
|
||||
let cont = Container::from_ast(&ctxt, input, Derive::Deserialize);
|
||||
let cont = match Container::from_ast(&ctxt, input, Derive::Deserialize) {
|
||||
Some(cont) => cont,
|
||||
None => return Err(ctxt.check().unwrap_err()),
|
||||
};
|
||||
precondition(&ctxt, &cont);
|
||||
try!(ctxt.check());
|
||||
|
||||
@@ -86,7 +89,7 @@ fn precondition_sized(cx: &Ctxt, cont: &Container) {
|
||||
if let Data::Struct(_, ref fields) = cont.data {
|
||||
if let Some(last) = fields.last() {
|
||||
if let syn::Type::Slice(_) = *last.ty {
|
||||
cx.error("cannot deserialize a dynamically sized struct");
|
||||
cx.error_spanned_by(cont.original, "cannot deserialize a dynamically sized struct");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -96,7 +99,10 @@ fn precondition_no_de_lifetime(cx: &Ctxt, cont: &Container) {
|
||||
if let BorrowedLifetimes::Borrowed(_) = borrowed_lifetimes(cont) {
|
||||
for param in cont.generics.lifetimes() {
|
||||
if param.lifetime.to_string() == "'de" {
|
||||
cx.error("cannot deserialize when there is a lifetime parameter called 'de");
|
||||
cx.error_spanned_by(
|
||||
¶m.lifetime,
|
||||
"cannot deserialize when there is a lifetime parameter called 'de",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user