repetitive 0.2.0

Macro for generating repetitive code
Documentation
use proc_macro2::{Delimiter, Group, TokenStream};
use syn::{parse::ParseStream, token::Brace};

use super::*;

#[derive(Debug, Clone)]
pub struct FragmentTokens {
    pub tokens: Tokens,
}

impl ContextParse for FragmentTokens {
    fn ctx_parse(input: ParseStream, ctx: &mut Context) -> Result<Self, Error>
    where
        Self: Sized,
    {
        let group = Group::ctx_parse(input, ctx)?;
        if group.delimiter() != Delimiter::Brace {
            return Err(Error::ParseError(syn::Error::new(
                group.span(),
                "expected a brace-delimited block",
            )));
        }

        let tokens = Tokens::ctx_parse.ctx_parse2(group.stream(), ctx)?;

        Ok(Self { tokens })
    }
}

impl Peek for FragmentTokens {
    fn peek(input: ParseStream) -> bool {
        input.peek(Brace)
    }
}

impl Optimize for FragmentTokens {
    fn optimize(&mut self, ctx: &mut Context) {
        self.tokens.optimize(ctx);
    }
}

impl Expand for FragmentTokens {
    fn expand(&self, output: &mut TokenStream, ctx: &mut Context, namespace: &Namespace) {
        self.tokens.expand(output, ctx, namespace);
    }
}