use crate::util::GenericsUtil;
pub(crate) fn find_v_lifetime(generics: &syn::Generics) -> syn::Result<Option<&syn::Lifetime>> {
let generics = GenericsUtil::new(generics);
let Some(lifetime) = generics.assert_at_most_one_lifetime_param()? else {
return Ok(None);
};
if !lifetime.bounds.is_empty() {
return Err(syn::Error::new_spanned(
lifetime,
"Lifetime parameter cannot have bounds",
));
}
if lifetime.lifetime.ident != "v" {
return Err(syn::Error::new_spanned(
lifetime,
"Lifetime parameter must be named 'v'",
));
}
Ok(Some(&lifetime.lifetime))
}