let mut names = vec![];
let mut output = vec![];
for field in &fields.named {
- let fname = &field.ident;
dbg!(field);
- let mut skl = quote!{ SectionKindList::Ordinary };
- let mut method = quote!{ ordinary };
+ let fname = &field.ident.as_ref().unwrap();
+ let fname_span = fname.span();
+ let mut skl = quote_spanned!{fname_span=> SectionKindList::Ordinary };
+ let mut method = quote_spanned!{fname_span=> ordinary };
for attr in &field.attrs {
if attr.tokens.is_empty() {
let atspan = attr.path.segments.last().unwrap().ident.span();
skl = get_path(tskl);
}
}
- let fname_string = fname.as_ref().unwrap().to_string();
+ let fname_string = fname.to_string();
let fname_lit = Literal::string( &fname_string );
names.push(quote!{
(#fname_lit, #skl),
});
- output.push(quote_spanned!{fname.as_ref().unwrap().span()=>
+ dbg!(&method);
+ output.push(quote!{
#fname: rctx. #method ( #fname_lit )?,
});
eprintln!("{:?} method={:?} skl={:?}", field.ident, method, skl);
}
+ dbg!(&output);
let output = quote! {
impl #target {
const FIELDS: &'static [(&'static str, SectionKindList)]
- = &[ #( #names ),* ];
+ = &[ #( #names )* ];
fn resolve_instance(rctx: &ResolveContext)
-> ::std::result::Result<#target, anyhow::Error>