Skip to main content

read_only_derive/
lib.rs

1extern crate proc_macro;
2
3mod expand;
4
5use proc_macro::TokenStream;
6use quote::quote;
7use syn::parse::Nothing;
8use syn::{DeriveInput, parse_macro_input};
9
10#[proc_macro_attribute]
11pub fn embed(args: TokenStream, tokens: TokenStream) -> TokenStream {
12    let original = tokens.clone();
13    parse_macro_input!(args as Nothing);
14    let input = parse_macro_input!(tokens as DeriveInput);
15
16    expand::embed(input)
17        .unwrap_or_else(|e| {
18            let original = proc_macro2::TokenStream::from(original);
19            let compile_error = e.to_compile_error();
20            quote! {
21                #original
22                #compile_error
23            }
24        })
25        .into()
26}