#![warn(
missing_copy_implementations,
missing_debug_implementations,
missing_docs,
unreachable_pub,
clippy::missing_const_for_fn,
rustdoc::all
)]
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
#![deny(unused_must_use, rust_2018_idioms)]
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
use crate::utils::{
from_env::{FromEnv, FromEnvErr},
metrics::MetricsConfig,
otlp::OtelGuard,
tracing::TracingConfig,
};
#[cfg(feature = "perms")]
pub mod perms;
pub mod utils {
pub mod calc;
pub mod from_env;
pub mod metrics;
pub mod otel_axum;
pub mod otlp;
#[cfg(feature = "alloy")]
pub mod provider;
#[cfg(feature = "aws")]
pub mod signer;
pub mod tracing;
#[cfg(feature = "block_watcher")]
pub mod block_watcher;
}
pub mod deps {
pub use metrics;
pub use opentelemetry;
pub use opentelemetry_otlp;
pub use opentelemetry_sdk;
pub use tracing;
pub use tracing_core;
pub use tracing_opentelemetry;
pub use tracing_subscriber;
}
#[deprecated(since = "0.18.0-rc.11", note = "use `init` instead")]
pub fn init4() -> Option<OtelGuard> {
let guard = utils::tracing::init_tracing();
utils::metrics::init_metrics();
#[cfg(feature = "rustls")]
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
guard
}
pub trait Init4Config: FromEnv {
fn tracing(&self) -> &TracingConfig;
fn metrics(&self) -> &MetricsConfig;
}
#[derive(Debug)]
pub struct ConfigAndGuard<T> {
pub config: T,
pub guard: Option<OtelGuard>,
}
pub fn init<T: Init4Config>() -> Result<ConfigAndGuard<T>, FromEnvErr> {
let config = T::from_env()?;
let guard = utils::tracing::init_tracing_with_config(config.tracing().clone());
utils::metrics::init_metrics_with_config(*config.metrics());
#[cfg(feature = "rustls")]
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
Ok(ConfigAndGuard { config, guard })
}