1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
extern crate proc_macro;

use quote::quote;
use syn::parse_macro_input;

use ckb_occupied_capacity_core::Capacity;

#[proc_macro]
pub fn capacity_bytes(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let input = parse_macro_input!(input as syn::LitInt);
    let expanded = if let Ok(oc) = Capacity::bytes(input.value() as usize) {
        let shannons = syn::LitInt::new(oc.as_u64(), syn::IntSuffix::None, input.span());
        quote!(Capacity::shannons(#shannons))
    } else {
        panic!("Occupied capacity is overflow.");
    };
    expanded.into()
}