cgp-macro-lib 0.7.0

Context-generic programming core component macros implemented as a library.
Documentation
use quote::ToTokens;
use syn::spanned::Spanned;
use syn::{Error, Ident, ItemImpl, Type, parse2};

use crate::parse::SimpleType;

pub fn derive_component_name_from_provider_impl(provider_impl: &ItemImpl) -> syn::Result<Type> {
    let provider_trait = provider_impl.trait_.as_ref().ok_or_else(|| {
        Error::new(
            provider_impl.span(),
            "expect provider trait name to be present",
        )
    })?;

    let provider_trait: SimpleType = parse2(provider_trait.1.to_token_stream())?;

    let component_ident = Ident::new(
        &format!("{}Component", provider_trait.name),
        provider_trait.span(),
    );

    parse2(component_ident.to_token_stream())
}