feat(codegen): Add #[serde(serialize_with="...")]

This allows a field to be serialized with an expression instead
of the default serializer. This simplifies serializing a struct
or enum that contains an external type that doesn't implement
`serde::Serialize`. This expression is passed a variable
`serializer` that needs to be used to serialize the expression.
This commit is contained in:
Erick Tryzelaar
2016-02-15 17:39:46 -08:00
parent de89f95f31
commit 001cb7ab01
3 changed files with 196 additions and 1 deletions
+6 -1
View File
@@ -672,8 +672,13 @@ fn serialize_struct_visitor(
}
};
let field_expr = match field_attr.serialize_with() {
Some(expr) => expr.clone(),
None => quote_expr!(cx, &self.value.$name),
};
let expr = quote_expr!(cx,
serializer.$serializer_method($key_expr, &self.value.$name)
serializer.$serializer_method($key_expr, $field_expr)
);
quote_arm!(cx,