cgp-macro-lib 0.6.1

Context-generic programming core component macros implemented as a library.
Documentation
use syn::Ident;
use syn::parse::{Parse, ParseStream};
use syn::token::{Colon, Lt};

use crate::parse::{SimpleType, TypeGenerics};

pub struct ContextSpec {
    pub provider_name: Ident,
    pub provider_generics: Option<TypeGenerics>,
    pub preset: Option<SimpleType>,
}

impl Parse for ContextSpec {
    fn parse(input: ParseStream) -> syn::Result<Self> {
        let provider_name = input.parse()?;

        let provider_generics = if input.peek(Lt) {
            Some(input.parse()?)
        } else {
            None
        };

        let colon: Option<Colon> = input.parse()?;

        let preset = match colon {
            Some(_) => {
                let preset = input.parse()?;
                Some(preset)
            }
            None => None,
        };

        Ok(Self {
            provider_name,
            provider_generics,
            preset,
        })
    }
}