mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-07-04 06:17:24 +00:00
Cleanup train
This commit is contained in:
@@ -1,4 +1,8 @@
|
||||
use syntax::ast;
|
||||
use syntax::ext::base::ExtCtxt;
|
||||
use syntax::ptr::P;
|
||||
|
||||
use aster;
|
||||
|
||||
pub fn field_alias(field: &ast::StructField) -> Option<&ast::Lit> {
|
||||
field.node.attrs.iter()
|
||||
@@ -27,3 +31,27 @@ pub fn field_alias(field: &ast::StructField) -> Option<&ast::Lit> {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn struct_field_strs(
|
||||
cx: &ExtCtxt,
|
||||
builder: &aster::AstBuilder,
|
||||
struct_def: &ast::StructDef,
|
||||
) -> Vec<P<ast::Expr>> {
|
||||
struct_def.fields.iter()
|
||||
.map(|field| {
|
||||
match field_alias(field) {
|
||||
Some(alias) => builder.expr().build_lit(P(alias.clone())),
|
||||
None => {
|
||||
match field.node.kind {
|
||||
ast::NamedField(name, _) => {
|
||||
builder.expr().str(name)
|
||||
}
|
||||
ast::UnnamedField(_) => {
|
||||
cx.bug("struct has named and unnamed fields")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user