trait-enumizer 0.1.1

Proc macro to automatically generate enum based on method signatures (with appropriate helpers)
Documentation
#![cfg(feature="flume")]

use trait_enumizer::flume_class;

struct Qqq {}

#[trait_enumizer::enumizer(
    name=QqqEnum,
    inherent_impl,
    returnval=flume_class,
    call_fn(ref,name=try_call,async),
    proxy(Fn,name=QqqUsualProxy),
    proxy(Fn,name=QqqAsyncProxy,async),
)]
impl Qqq {
    fn foo(&self) -> String {
        dbg!("foo");
        "qqq".to_owned()
    }

    async fn bar(&self, x: i32) -> i32 {
        dbg!("bar", x);
        333
    }

    async fn baz(&self, y: String, z: Vec<u8>) {
        dbg!("baz", y, z);
    }
}

#[test]
fn async_to_async() {
    let o = Qqq {};
    let p = QqqAsyncProxy::<std::convert::Infallible, _, _>(|c: QqqEnum| async { Ok(c.try_call(&o).await.unwrap()) });

    dbg!(futures::executor::block_on(p.try_foo()).unwrap().unwrap());
    dbg!(futures::executor::block_on(p.try_bar(4)).unwrap().unwrap());
    dbg!(futures::executor::block_on(p.try_baz("qqq".to_owned(), vec![])).unwrap());
}


#[test]
fn usual_to_async() {
    let o = Qqq {};
    let p = QqqUsualProxy::<std::convert::Infallible, _>(|c: QqqEnum| Ok(futures::executor::block_on(c.try_call(&o)).unwrap()));

    dbg!(p.try_foo().unwrap().unwrap());
    dbg!(p.try_bar(4).unwrap().unwrap());
    dbg!(p.try_baz("qqq".to_owned(), vec![]).unwrap());
}