use crate::spec::ProbeCallSpecification;
use crate::TracersResult;
use proc_macro2::TokenStream;
use quote::{quote, quote_spanned};
use syn::spanned::Spanned;
pub(super) fn generate_probe_call(call: ProbeCallSpecification) -> TracersResult<TokenStream> {
match call {
ProbeCallSpecification::FireOnly(details) => {
let probe_func_name = syn::Ident::new(
&format!("get_{}_probe", details.probe.ident),
details.probe.ident.span(),
);
let span = details.call.span();
let provider = details.provider;
let args = if details.args.is_empty() {
quote! { () }
} else {
let args = details.args;
quote! { (#(#args),*,) }
};
Ok(quote_spanned! {span=>
{
if let Some(__tracers_probe) = #provider::#probe_func_name() {
if __tracers_probe.is_enabled() {
__tracers_probe.fire(#args);
}
}
}
})
}
ProbeCallSpecification::FireWithCode { .. } => unimplemented!(),
}
}