1#![feature(box_patterns)]
2extern crate proc_macro;
11use proc_macro::TokenStream;
12
13mod entrypoint;
14mod persist;
15mod interrupt;
16
17#[proc_macro_attribute]
19#[cfg(not(test))]
20pub fn main(args: TokenStream, item: TokenStream) -> TokenStream {
21 entrypoint::generate_main(args,item)
22}
23
24#[proc_macro_derive(Persist, attributes(persist))]
25pub fn derive_persist(item: TokenStream) -> TokenStream {
26 persist::derive_persist(item)
27}
28
29#[proc_macro_attribute]
30pub fn interrupt(args: TokenStream, item: TokenStream) -> TokenStream {
31 interrupt::generate_interrupt(args,item)
32}
33
34fn parse_string_literal(string: syn::Lit) -> Result<String,syn::Error> {
36 match string {
37 syn::Lit::Str(s) => Ok(s.value()),
38 syn::Lit::Verbatim(s) => Ok(s.to_string()),
39 _ => Err(syn::Error::new_spanned(string, "Cannot parse value as string"))
40 }
41}
42
43fn parse_usize_literal(literal: syn::Lit) -> Result<usize,syn::Error> {
44 match literal {
45 syn::Lit::Int(litint) => {
46 Ok(litint.base10_parse::<usize>()?)
47 },
48 _ => Err(syn::Error::new_spanned(literal, "Cannot parse value as usize"))
49 }
50}
51
52
53
54