use quote::format_ident;
use syn::{Ident, Pat, ReturnType, Signature, Type, parse_quote};
pub(crate) fn return_identifiers(sig: &Signature) -> Vec<Ident> {
match &sig.output {
ReturnType::Default => Vec::new(),
ReturnType::Type(_, ty) => match &**ty {
Type::Tuple(tuple) => (0..tuple.elems.len())
.map(|i| format_ident!("r_{}", i))
.collect(),
_ => vec![format_ident!("r_0")],
},
}
}
pub(crate) fn result_pattern(idents: &Vec<Ident>) -> Pat {
match idents.len() {
0 => parse_quote! { _ },
1 => {
let id = &idents[0];
parse_quote! { #id }
}
_ => parse_quote! { (#(#idents),*) },
}
}