Cleanup train

This commit is contained in:
Erick Tryzelaar
2015-03-15 15:04:11 -07:00
parent aacc14ad7b
commit b628446768
3 changed files with 36 additions and 33 deletions
+28
View File
@@ -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()
}