secador-macro 0.1.0

Proc macros for secador crate
Documentation
use proc_macro2::TokenStream;
use quote::{ToTokens, quote};
use syn::{
    Block, Result, Stmt, Token,
    parse::{Parse, ParseStream},
};

use crate::dryer::Dryer;

pub struct SecadorMacro {
    pub stmts: Vec<Stmt>,
}

impl ToTokens for SecadorMacro {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        let Self { stmts: statements } = self;
        tokens.extend(quote! {
          #(#statements)*
        });
    }
}

impl Parse for SecadorMacro {
    fn parse(input: ParseStream) -> Result<Self> {
        let mut dryer = Dryer::default().parse_args(input)?;
        input.parse::<Token![,]>()?;
        let block: Block = input.parse()?;

        Ok(Self {
            stmts: dryer.try_dry_block(block)?.stmts,
        })
    }
}