if let语法糖
学习过程宏的时候发现if let
竟然可以这样用,话不多说,贴代码
...
type StructFields = syn::punctuated::Punctuated<syn::Field, syn::Token![,]>;
fn get_fields_from_derive_input(d: &DeriveInput) -> syn::Result<&StructFields> {
if let syn::Data::Struct(syn::DataStruct {
fields: syn::Fields::Named(syn::FieldsNamed { ref named, .. }),
..
}) = d.data {
return Ok(named);
}
Err(syn::Error::new_spanned(d, "Must define on a Struct, not Enum".to_string()))
}
...
用途:对于极其复杂的嵌套结构体,可以快速解构,拿到自己想要的值。👍