in sgx_serialize_derive/src/encode.rs [405:460]
fn serialize_tuple_struct_visitor(
fields: &[Field],
is_struct: bool,
) -> Vec<Tokens> {
fields
.iter()
.enumerate()
.map(
|(i, field)| {
let field_expr = if is_struct {
match field.ident {
Some(ref ident) => {
let id = Ident::new(format!("\"{}\"", ident.clone().as_ref()));
quote!(#id)
}
None => {
panic!("struct filed must have name!")
}
}
} else {
let id = Ident::new(format!("\"_field{}\"", i));
quote!(#id)
};
let arg = Ident::new(format!("__self_0_{}", i));
let field_arg = quote!(#arg);
if fields.iter().count() == i+1 {
quote! {
return _e.emit_struct_field(#field_expr,
#i,
|_e| -> _ {
::sgx_serialize::Serializable::encode(&(*#field_arg), _e)
});
}
} else {
quote! {
match _e.emit_struct_field(#field_expr,
#i,
|_e| -> _ {
::sgx_serialize::Serializable::encode(&(*#field_arg),
_e)
})
{
::std::result::Result::Ok(__try_var)
=> __try_var,
::std::result::Result::Err(__try_var)
=>
return ::std::result::Result::Err(__try_var),
}
}
}
},
)
.collect()
}