finny_derive 0.1.0

Procedural macros crate for the main finite state machine crate, finny.
Documentation
extern crate proc_macro;
extern crate proc_macro2;

extern crate syn;
extern crate quote;

use codegen::generate_fsm_code;
use parse::FsmFnInput;
use proc_macro::TokenStream;

mod codegen;
mod parse;
mod parse_blocks;
mod parse_fsm;
mod utils;
mod validation;

#[proc_macro_attribute]
pub fn finny_fsm(attr: TokenStream, item: TokenStream) -> TokenStream {
    let attr2: proc_macro2::TokenStream = attr.into();
    let item2: proc_macro2::TokenStream = item.into();

    let parsed = match FsmFnInput::parse(attr2.clone(), item2.clone()) {
        Ok(p) => p,
        Err(e) => return e.to_compile_error().into()
    };

    match generate_fsm_code(&parsed, attr2.clone(), item2.clone()) {
        Ok(t) => t.into(),
        Err(e) => e.to_compile_error().into()
    }
}