wire_framework_derive/
lib.rs1extern crate proc_macro;
2
3use proc_macro::TokenStream;
4use syn::{DeriveInput, parse_macro_input};
5
6use crate::macro_impl::{MacroImpl, MacroKind};
7
8pub(crate) mod helpers;
9mod labels;
10mod macro_impl;
11
12#[proc_macro_derive(FromContext, attributes(context))]
17pub fn from_context_derive(input: TokenStream) -> TokenStream {
18 let input = parse_macro_input!(input as DeriveInput);
20 MacroImpl::parse(MacroKind::FromContext, input)
21 .and_then(|from_context| from_context.render())
22 .unwrap_or_else(syn::Error::into_compile_error)
23 .into()
24}
25
26#[proc_macro_derive(IntoContext, attributes(context))]
32pub fn into_context_derive(input: TokenStream) -> TokenStream {
33 let input = parse_macro_input!(input as DeriveInput);
35 MacroImpl::parse(MacroKind::IntoContext, input)
36 .and_then(|from_context| from_context.render())
37 .unwrap_or_else(syn::Error::into_compile_error)
38 .into()
39}