ontio-codegen 0.2.1

codegen for ontio-std
Documentation
`
#[test]

fn smoke() {
    let origin = quote! {
        trait Token {
            fn transfer(&mut self, from:u32, to:u32, value:u32) -> bool;
            fn balance_of(&self, owner:u32) -> u32;
            fn name(&self) -> String {
                "TestToken".to_string()
            }

            #[event]
            fn Transfer(&mut self, from:u32, to:u32, value:u32);
        }
    }
    .into();
    let expected = quote! {
        pub trait Token {
            fn transfer(&mut self, from: u32, to: u32, value: u32) -> bool;
            fn balance_of(&self, owner: u32) -> u32;
            fn name(&self) -> String {
                "TestToken".to_string()
            }
            fn Transfer(&mut self, from: u32, to: u32, value: u32) {
                let mut sink = ontio_std::abi::Sink::new(16);
                sink.write::<u32>(from);
                sink.write::<u32>(to);
                sink.write::<u32>(value);
                ontio_std::runtime::notify(&sink.into());
            }
        }
        pub struct Dispatcher<T: Token> {
            pub(crate) contract_instance: T,
        }
        impl<T: Token> Dispatcher<T> {
            pub fn new(cont: T) -> Self {
                Self {
                    contract_instance: cont,
                }
            }
            pub fn instance(&self) -> &T {
                &self.contract_instance
            }
        }
        impl<T: Token> ontio_std::abi::Dispatcher for Dispatcher<T> {
            fn dispatch(&mut self, payload: &[u8]) -> Vec<u8> {
                let contract_instance = &mut self.contract_instance;
                let mut source = ontio_std::abi::Source::new(payload.to_vec());
                let action = source.read::<String>().unwrap();
                let arg_decode_err = "failed to decode argument";
                match action.as_str() {
                    "transfer" => {
                        let res = contract_instance.transfer(
                            source.read::<u32>().expect(arg_decode_err),
                            source.read::<u32>().expect(arg_decode_err),
                            source.read::<u32>().expect(arg_decode_err),
                        );
                        let mut sink = ontio_std::abi::Sink::new(16);
                        sink.write(res);
                        sink.into()
                    }
                    "balance_of" => {
                        let res = contract_instance.balance_of(source.read::<u32>().expect(arg_decode_err));
                        let mut sink = ontio_std::abi::Sink::new(16);
                        sink.write(res);
                        sink.into()
                    }
                    "name" => {
                        let res = contract_instance.name();
                        let mut sink = ontio_std::abi::Sink::new(16);
                        sink.write(res);
                        sink.into()
                    }
                    _ => panic!("invoke unsupported method"),
                }
            }
        }
    };

    let item: syn::Item = syn::parse(origin).unwrap();
    let result = quote(item);

    assert_eq!(result.to_string(), expected.to_string());
}
`