tracers_macros_hack/
lib.rs1extern crate proc_macro;
2
3use proc_macro::TokenStream as CompilerTokenStream;
6use proc_macro2::TokenStream;
7use proc_macro_hack::proc_macro_hack;
8use tracers_codegen::proc_macros::{init_provider_impl, probe_impl, tracer_impl};
9
10#[proc_macro_hack]
11pub fn probe(input: CompilerTokenStream) -> CompilerTokenStream {
12 match probe_impl(TokenStream::from(input)) {
13 Ok(stream) => stream,
14 Err(err) => err.into_compiler_error(),
15 }
16 .into()
17}
18
19#[proc_macro_hack]
20pub fn init_provider(input: CompilerTokenStream) -> CompilerTokenStream {
21 match init_provider_impl(TokenStream::from(input)) {
22 Ok(stream) => stream,
23 Err(err) => err.into_compiler_error(),
24 }
25 .into()
26}
27
28#[proc_macro_attribute]
29pub fn tracer(attr: CompilerTokenStream, item: CompilerTokenStream) -> CompilerTokenStream {
30 match tracer_impl(TokenStream::from(attr), TokenStream::from(item)) {
31 Ok(stream) => stream,
32 Err(err) => err.into_compiler_error(),
33 }
34 .into()
35}