in sdk/typespec/typespec_macros/src/safe_debug.rs [25:65]
fn generate_body(ast: DeriveInput) -> Result<TokenStream> {
let (impl_generics, ty_generics, where_clause) = ast.generics.split_for_impl();
let name = &ast.ident;
let body = match &ast.data {
Data::Enum(DataEnum { variants, .. }) => {
let variants = variants.iter().map(|v| {
let variant_name = &v.ident;
let path = to_path(&[name, variant_name]);
generate_fields(&path, &v.fields)
});
quote! {
match self {
#(#variants),*
}
}
}
Data::Struct(DataStruct { fields, .. }) => {
let path = to_path(&[name]);
let fields = generate_fields(&path, fields);
quote! {
match self {
#fields
}
}
}
_ => return Err(Error::new(ast.span(), "type not supported for `SafeDebug`")),
};
Ok(quote! {
#[automatically_derived]
impl #impl_generics ::std::fmt::Debug for #name #ty_generics #where_clause {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
#body
}
}
})
}