use crate::gen;
use crate::spec::ProbeCallSpecification;
use crate::spec::ProviderInitSpecification;
use crate::spec::ProviderSpecification;
use crate::spec::TracerAttributeArgs;
use crate::TracersResult;
use proc_macro2::TokenStream;
use std::fmt::Display;
pub fn report_error<T: quote::ToTokens, U: Display>(tokens: &T, message: U) -> TokenStream {
syn::Error::new_spanned(tokens, message).to_compile_error()
}
pub fn probe_impl(tokens: TokenStream) -> TracersResult<TokenStream> {
gen::code_generator()?.handle_probe_call(ProbeCallSpecification::from_token_stream(tokens)?)
}
pub fn init_provider_impl(tokens: TokenStream) -> TracersResult<TokenStream> {
gen::code_generator()?
.handle_init_provider(ProviderInitSpecification::from_token_stream(tokens)?)
}
pub fn tracer_impl(attr_tokens: TokenStream, tokens: TokenStream) -> TracersResult<TokenStream> {
gen::code_generator()?.handle_provider_trait(ProviderSpecification::from_token_stream(
&std::env::var("CARGO_PKG_NAME").expect("CARGO_PKG_NAME"),
TracerAttributeArgs::from_token_stream(attr_tokens)?,
tokens,
)?)
}