Omit None values from snapshot
diff --git a/codegen/src/debug.rs b/codegen/src/debug.rs
index e9908a3..8b6a9c7 100644
--- a/codegen/src/debug.rs
+++ b/codegen/src/debug.rs
@@ -157,11 +157,39 @@
Data::Struct(fields) => {
let fields = fields.iter().filter_map(|(f, ty)| {
let ident = Ident::new(f, Span::call_site());
- let val = quote!(&self.value.#ident);
- let format = format_field(&val, ty)?;
- Some(quote! {
- formatter.field(#f, #format);
- })
+ if let Type::Option(ty) = ty {
+ let inner = quote!(_val);
+ let format = format_field(&inner, ty).map(|format| {
+ quote! {
+ let #inner = &self.0;
+ formatter.write_str("(")?;
+ Debug::fmt(#format, formatter)?;
+ formatter.write_str(")")?;
+ }
+ });
+ let ty = rust_type(ty);
+ Some(quote! {
+ if let Some(val) = &self.value.#ident {
+ #[derive(RefCast)]
+ #[repr(transparent)]
+ struct Print(#ty);
+ impl Debug for Print {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ formatter.write_str("Some")?;
+ #format
+ Ok(())
+ }
+ }
+ formatter.field(#f, Print::ref_cast(val));
+ }
+ })
+ } else {
+ let val = quote!(&self.value.#ident);
+ let format = format_field(&val, ty)?;
+ Some(quote! {
+ formatter.field(#f, #format);
+ })
+ }
});
quote! {
let mut formatter = formatter.debug_struct(#name);