comfund_macro_impl 0.1.2

Implementation of `comfund` macros.
Documentation
#![allow(dead_code)]
#![allow(unused_imports)]

mod clients;
mod contract;
mod extensions;
mod servers;
mod utils;

use crate::contract::Contract;

use proc_macro2::token_stream::TokenStream;

#[derive(Debug)]
struct ContractAttribute {}

pub fn contract(args: TokenStream, input: TokenStream) -> TokenStream {
    let item_trait = match syn::parse2::<syn::ItemTrait>(input) {
        Ok(item) => item,
        Err(err) => return err.into_compile_error(),
    };

    let contract = match Contract::parse(args, item_trait) {
        Ok(contract) => contract,
        Err(err) => return err.into_compile_error(),
    };

    let mut stream = TokenStream::new();

    stream.extend(contract::implement(&contract));
    stream.extend(clients::implement(&contract));
    stream.extend(servers::implement(&contract));

    stream
}