1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;

pub mod persistent;
pub mod reason;
pub mod sys;
pub mod transaction;

pub use reason::Reason;
pub use transaction::Transaction;

#[macro_export]
macro_rules! contract_entry {
    ($entry:ident) => {
        #[no_mangle]
        pub extern "C" fn contract_main() {
            fn assert_entry_type<F: Fn()>(_: F) {}
            assert_entry_type($entry);

            $entry();
        }
    };
}