aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-05-15 19:09:34 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-05-15 19:09:34 +0200
commita1cc3d2ff5f785372256856a33c5e4b0841cb12c (patch)
treedbaee23c2d439d6c6df4265fcdb57b66506bd396
parentb42cf760d3d72b814abf8b91a69ccb4ad2d06d89 (diff)
deriver Serialize for structs where all fields are Serialize
-rw-r--r--src/lib.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lib.rs b/src/lib.rs
index b965ae2..bf0b80c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -7,10 +7,19 @@ pub fn derive_serialize(item: TokenStream) -> TokenStream {
let ast: ItemStruct = parse(item).unwrap();
let name = ast.ident;
+ let serializers = ast.fields.iter().map(|field| {
+ let field_name = field.ident.as_ref().expect("should be a names struct");
+
+ quote!(
+ self.#field_name.serialize(w)?;
+ )
+ });
+
quote!(
impl Serialize for #name {
fn serialize<W: std::io::Write>(&self, w: &mut W) -> Result<()> {
- w.write_all(&[42])?;
+ #(#serializers) *
+
Ok(())
}
}