lifetime_proc_macros_impl 0.1.0

Traits and derive macros to change the lifetime of a type, allowing efficient reuse of your stucts or enums with any lifetime requirement.
Documentation
use syn::{GenericParam, Generics, Lifetime, LifetimeDef};

pub(crate) fn assert_generics_are_supported(generics: &Generics) {
    for param in &generics.params {
        match param {
            GenericParam::Type(type_param) => {
                panic!(
                    "Generic type parameters are not supported. The type parameter is {}",
                    type_param.ident
                )
            }
            GenericParam::Lifetime(lifetime_param) => {
                if !lifetime_param.bounds.is_empty() {
                    panic!("Generic lifetime parameters with bounds are not supported. The lifetime with bounds is '{}", lifetime_param.lifetime.ident)
                }
            }
            GenericParam::Const(const_param) => {
                panic!(
                    "Const generic parameters are not supported. The const parameter is {}",
                    const_param.ident
                )
            }
        }
    }
}

pub(crate) fn add_lifetime(mut generics: Generics, lifetime: Lifetime) -> Generics {
    generics
        .params
        .insert(0, GenericParam::Lifetime(LifetimeDef::new(lifetime)));
    generics
}

pub(crate) fn replace_lifetimes(mut generics: Generics, new: &Lifetime) -> Generics {
    for old in generics.lifetimes_mut() {
        *old = LifetimeDef::new(new.clone());
    }
    generics
}