feat(codegen): Remove {Ser,Deser}ializer::format

This feature has never been used, and it's complicating the
implementation of #207. We could restore this functionality if there is
ever interest in it.

Closes #211.
This commit is contained in:
Erick Tryzelaar
2016-02-07 22:03:01 -08:00
parent 5d4f9ce72b
commit d0ee5b0b4b
7 changed files with 23 additions and 255 deletions
+10 -73
View File
@@ -1,5 +1,3 @@
use std::collections::HashSet;
use aster;
use syntax::ast::{
@@ -832,18 +830,11 @@ fn deserialize_field_visitor(
}
);
// A set of all the formats that have specialized field attributes
let formats = field_attrs.iter()
.fold(HashSet::new(), |mut set, field_expr| {
set.extend(field_expr.formats());
set
});
// Match arms to extract a field from a string
let default_field_arms: Vec<_> = field_idents.iter()
.zip(field_attrs.iter())
.map(|(field_ident, field_expr)| {
let expr = field_expr.default_key_expr();
.map(|(field_ident, field_attrs)| {
let expr = &field_attrs.name_expr();
quote_arm!(cx, $expr => { Ok(__Field::$field_ident) })
})
.collect();
@@ -854,49 +845,12 @@ fn deserialize_field_visitor(
quote_expr!(cx, Err(::serde::de::Error::unknown_field(value)))
};
let str_body = if formats.is_empty() {
// No formats specific attributes, so no match on format required
quote_expr!(cx,
match value {
$default_field_arms
_ => { $fallthrough_arm_expr }
})
} else {
let field_arms: Vec<_> = formats.iter()
.map(|fmt| {
field_idents.iter()
.zip(field_attrs.iter())
.map(|(field_ident, field_expr)| {
let expr = field_expr.key_expr(fmt);
quote_arm!(cx, $expr => { Ok(__Field::$field_ident) })
})
.collect::<Vec<_>>()
})
.collect();
let fmt_matches: Vec<_> = formats.iter()
.zip(field_arms.iter())
.map(|(ref fmt, ref arms)| {
quote_arm!(cx, $fmt => {
match value {
$arms
_ => {
$fallthrough_arm_expr
}
}})
})
.collect();
quote_expr!(cx,
match __D::format() {
$fmt_matches
_ => match value {
$default_field_arms
_ => $fallthrough_arm_expr
}
}
)
};
let str_body = quote_expr!(cx,
match value {
$default_field_arms
_ => $fallthrough_arm_expr
}
);
let impl_item = quote_item!(cx,
impl ::serde::de::Deserialize for __Field {
@@ -1042,25 +996,8 @@ fn deserialize_map(
let missing_expr = if field_attr.use_default() {
quote_expr!(cx, ::std::default::Default::default())
} else {
let formats = field_attr.formats();
let arms : Vec<_> = formats.iter()
.map(|format| {
let key_expr = field_attr.key_expr(format);
quote_arm!(cx, $format => { $key_expr })
})
.collect();
let default = field_attr.default_key_expr();
if arms.is_empty() {
quote_expr!(cx, try!(visitor.missing_field($default)))
} else {
quote_expr!(
cx,
try!(visitor.missing_field(
match __D::format() {
$arms
_ => { $default }
})))
}
let name = &field_attr.name_expr();
quote_expr!(cx, try!(visitor.missing_field($name)))
};
quote_stmt!(cx,