in sgx_serialize_derive/src/decode.rs [132:224]
fn deserialize_variant(
cont: &Container,
variant: &Variant,
variant_index: usize
) -> Tokens {
let this: syn::Ident = cont.ident.clone().into();
let variant_ident = variant.ident.clone();
let case = match variant.style {
Style::Unit => {
quote! {
#variant_index => {
#this::#variant_ident
}
}
}
Style::Newtype => {
quote! {
#variant_index => {
#this::#variant_ident(match _d.read_enum_variant_arg(0usize, ::sgx_serialize::DeSerializable::decode) {
::std::result::Result::Ok(__try_var) => __try_var,
::std::result::Result::Err(__try_var) => {
return ::std::result::Result::Err(__try_var)
},
})
}
}
}
Style::Tuple => {
let fileds_case: Vec<_> = variant.fields
.iter()
.enumerate()
.map(
|(i, _)| -> _ {
quote! {
match _d.read_enum_variant_arg(#i, ::sgx_serialize::DeSerializable::decode) {
::std::result::Result::Ok(__try_var) => __try_var,
::std::result::Result::Err(__try_var) =>
return ::std::result::Result::Err(__try_var),
}
}
}
)
.collect();
quote! {
#variant_index => {
#this::#variant_ident(
#(#fileds_case,)*
)
}
}
}
Style::Struct => {
let fields = variant
.fields
.iter()
.map(
|f| {
f.ident
.clone()
.expect("struct variant has unnamed fields")
},
);
let fileds_case: Vec<_> = variant.fields
.iter()
.enumerate()
.map(
|(i, _)| -> _ {
quote! {
match _d.read_enum_variant_arg(#i, ::sgx_serialize::DeSerializable::decode) {
::std::result::Result::Ok(__try_var) => __try_var,
::std::result::Result::Err(__try_var) =>
return ::std::result::Result::Err(__try_var),
}
}
}
)
.collect();
quote! {
#variant_index => {
#this::#variant_ident{
#(#fields: #fileds_case,)*
}
}
}
}
};
quote! {
#case
}
}