#![warn(missing_docs)]
mod analyze;
mod analyze2;
mod graph;
mod helper;
mod parse;
mod produce;
use graph::{StructElement, StructRelation};
use helper::write_graph_to_file;
use proc_macro::TokenStream;
use proc_macro_error::proc_macro_error;
use quote::quote;
use syn::{parse_macro_input, DeriveInput};
#[proc_macro_derive(TypestateBuilder)]
#[proc_macro_error]
pub fn typestate_builder_derive(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let (mut graph, mut map) = parse::run(input);
analyze::run(&mut graph, &map);
analyze2::run(&mut graph, &mut map);
let res = produce::run(&graph, &map);
let output = quote! {
#(#res)*
};
#[cfg(debug_assertions)]
{
write_graph_to_file(&graph, "example.dot").unwrap();
}
output.into()
}