mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-29 12:57:55 +00:00
More cleanup
This commit is contained in:
+26
-21
@@ -245,6 +245,10 @@ fn deserialize_struct(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
Named(ref fields) => {
|
Named(ref fields) => {
|
||||||
|
let fields: Vec<_> = fields.iter()
|
||||||
|
.map(|&(name, _)| name.clone())
|
||||||
|
.collect();
|
||||||
|
|
||||||
deserialize_struct_named_fields(
|
deserialize_struct_named_fields(
|
||||||
cx,
|
cx,
|
||||||
builder,
|
builder,
|
||||||
@@ -407,7 +411,7 @@ fn deserialize_struct_named_fields(
|
|||||||
builder: &aster::AstBuilder,
|
builder: &aster::AstBuilder,
|
||||||
struct_ident: Ident,
|
struct_ident: Ident,
|
||||||
struct_path: ast::Path,
|
struct_path: ast::Path,
|
||||||
fields: &[(Ident, Span)],
|
fields: &[Ident],
|
||||||
state: P<ast::Expr>,
|
state: P<ast::Expr>,
|
||||||
struct_def: &StructDef,
|
struct_def: &StructDef,
|
||||||
trait_generics: &ast::Generics,
|
trait_generics: &ast::Generics,
|
||||||
@@ -479,7 +483,7 @@ fn deserialize_field_visitor(
|
|||||||
cx: &ExtCtxt,
|
cx: &ExtCtxt,
|
||||||
builder: &aster::AstBuilder,
|
builder: &aster::AstBuilder,
|
||||||
field_names: &[ast::Ident],
|
field_names: &[ast::Ident],
|
||||||
fields: &[(Ident, Span)],
|
fields: &[Ident],
|
||||||
struct_def: &StructDef,
|
struct_def: &StructDef,
|
||||||
) -> Vec<P<ast::Item>> {
|
) -> Vec<P<ast::Item>> {
|
||||||
let field_enum = builder.item().enum_("__Field")
|
let field_enum = builder.item().enum_("__Field")
|
||||||
@@ -499,15 +503,13 @@ fn deserialize_field_visitor(
|
|||||||
let field_arms: Vec<ast::Arm> = fields.iter()
|
let field_arms: Vec<ast::Arm> = fields.iter()
|
||||||
.zip(field_names.iter())
|
.zip(field_names.iter())
|
||||||
.zip(aliases.iter())
|
.zip(aliases.iter())
|
||||||
.map(|((&(name, span), field), alias_lit)| {
|
.map(|((name, field), alias_lit)| {
|
||||||
let s = match alias_lit {
|
let s = match *alias_lit {
|
||||||
&None => cx.expr_str(span, token::get_ident(name)) ,
|
Some(lit) => builder.expr().build_lit(P(lit.clone())),
|
||||||
&Some(lit) =>{
|
None => builder.expr().str(name),
|
||||||
let lit = (*lit).clone();
|
|
||||||
cx.expr_lit(lit.span, lit.node)
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
quote_arm!(cx, $s => Ok(__Field::$field),)})
|
quote_arm!(cx, $s => { Ok(__Field::$field) })
|
||||||
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
vec![
|
vec![
|
||||||
@@ -548,7 +550,6 @@ fn deserialize_field_visitor(
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn default_value(field: &ast::StructField) -> bool {
|
fn default_value(field: &ast::StructField) -> bool {
|
||||||
field.node.attrs.iter()
|
field.node.attrs.iter()
|
||||||
.any(|sa|
|
.any(|sa|
|
||||||
@@ -576,7 +577,7 @@ fn deserialize_map(
|
|||||||
builder: &aster::AstBuilder,
|
builder: &aster::AstBuilder,
|
||||||
struct_path: ast::Path,
|
struct_path: ast::Path,
|
||||||
field_names: &[Ident],
|
field_names: &[Ident],
|
||||||
fields: &[(Ident, Span)],
|
fields: &[Ident],
|
||||||
struct_def: &StructDef,
|
struct_def: &StructDef,
|
||||||
) -> P<ast::Expr> {
|
) -> P<ast::Expr> {
|
||||||
// Declare each field.
|
// Declare each field.
|
||||||
@@ -604,8 +605,8 @@ fn deserialize_map(
|
|||||||
|
|
||||||
let extract_values: Vec<P<ast::Stmt>> = fields.iter()
|
let extract_values: Vec<P<ast::Stmt>> = fields.iter()
|
||||||
.zip(field_names.iter())
|
.zip(field_names.iter())
|
||||||
.map(|(&(name, span), field)| {
|
.map(|(name, field)| {
|
||||||
let name_str = cx.expr_str(span, token::get_ident(name));
|
let name_str = builder.expr().str(name);
|
||||||
quote_stmt!(cx,
|
quote_stmt!(cx,
|
||||||
let $field = match $field {
|
let $field = match $field {
|
||||||
Some($field) => $field,
|
Some($field) => $field,
|
||||||
@@ -619,8 +620,8 @@ fn deserialize_map(
|
|||||||
.with_id_exprs(
|
.with_id_exprs(
|
||||||
fields.iter()
|
fields.iter()
|
||||||
.zip(field_names.iter())
|
.zip(field_names.iter())
|
||||||
.map(|(&(name, _), field)| {
|
.map(|(name, field)| {
|
||||||
(name, builder.expr().id(field))
|
(name.clone(), builder.expr().id(field))
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
.build();
|
.build();
|
||||||
@@ -748,7 +749,7 @@ fn deserialize_enum_variant(
|
|||||||
deserialize_enum_variant_seq(
|
deserialize_enum_variant_seq(
|
||||||
cx,
|
cx,
|
||||||
builder,
|
builder,
|
||||||
&*fields,
|
fields.len(),
|
||||||
variant_path,
|
variant_path,
|
||||||
trait_generics,
|
trait_generics,
|
||||||
state,
|
state,
|
||||||
@@ -757,10 +758,14 @@ fn deserialize_enum_variant(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
Named(ref fields) => {
|
Named(ref fields) => {
|
||||||
|
let fields: Vec<_> = fields.iter()
|
||||||
|
.map(|&(field, _)| field.clone())
|
||||||
|
.collect();
|
||||||
|
|
||||||
deserialize_enum_variant_map(
|
deserialize_enum_variant_map(
|
||||||
cx,
|
cx,
|
||||||
builder,
|
builder,
|
||||||
&*fields,
|
&fields,
|
||||||
variant_path,
|
variant_path,
|
||||||
trait_generics,
|
trait_generics,
|
||||||
state,
|
state,
|
||||||
@@ -777,7 +782,7 @@ fn deserialize_enum_variant(
|
|||||||
fn deserialize_enum_variant_seq(
|
fn deserialize_enum_variant_seq(
|
||||||
cx: &ExtCtxt,
|
cx: &ExtCtxt,
|
||||||
builder: &aster::AstBuilder,
|
builder: &aster::AstBuilder,
|
||||||
fields: &[Span],
|
fields: usize,
|
||||||
variant_path: ast::Path,
|
variant_path: ast::Path,
|
||||||
trait_generics: &ast::Generics,
|
trait_generics: &ast::Generics,
|
||||||
state: P<ast::Expr>,
|
state: P<ast::Expr>,
|
||||||
@@ -787,7 +792,7 @@ fn deserialize_enum_variant_seq(
|
|||||||
let where_clause = &trait_generics.where_clause;
|
let where_clause = &trait_generics.where_clause;
|
||||||
|
|
||||||
// Create the field names for the fields.
|
// Create the field names for the fields.
|
||||||
let field_names: Vec<ast::Ident> = (0 .. fields.len())
|
let field_names: Vec<ast::Ident> = (0 .. fields)
|
||||||
.map(|i| token::str_to_ident(&format!("__field{}", i)))
|
.map(|i| token::str_to_ident(&format!("__field{}", i)))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
@@ -825,7 +830,7 @@ fn deserialize_enum_variant_seq(
|
|||||||
fn deserialize_enum_variant_map(
|
fn deserialize_enum_variant_map(
|
||||||
cx: &ExtCtxt,
|
cx: &ExtCtxt,
|
||||||
builder: &aster::AstBuilder,
|
builder: &aster::AstBuilder,
|
||||||
fields: &[(Ident, Span)],
|
fields: &[Ident],
|
||||||
variant_path: ast::Path,
|
variant_path: ast::Path,
|
||||||
trait_generics: &ast::Generics,
|
trait_generics: &ast::Generics,
|
||||||
state: P<ast::Expr>,
|
state: P<ast::Expr>,
|
||||||
|
|||||||
Reference in New Issue
Block a user