tracers_macros_hack/
lib.rs

1extern crate proc_macro;
2
3//We have to use the `proc_macro` types for the actual macro impl, but everywhere else we'll use
4//`proc_macro2` for better testability
5use 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}