pub use telemetry_safe::{
TelemetryDebug, TelemetryDisplay, ToTelemetry, telemetry, telemetry_debug,
};
pub use telemetry_safe_tracing_macros::safe_instrument;
pub use tracing;
extern crate self as telemetry_safe_tracing;
#[doc(hidden)]
pub mod __private {
use crate::tracing::{Span, field};
use crate::{ToTelemetry, telemetry};
pub fn record_ret<T: ToTelemetry>(span: &Span, value: &T) {
span.record("ret", field::display(telemetry(value)));
}
pub fn record_err<R: SafeInstrumentResult>(span: &Span, result: &R) {
result.record_err(span);
}
pub trait SafeInstrumentResult {
fn record_err(&self, span: &Span);
}
impl<T, E: ToTelemetry> SafeInstrumentResult for Result<T, E> {
fn record_err(&self, span: &Span) {
if let Err(err) = self {
span.record("err", field::display(telemetry(err)));
}
}
}
}
#[cfg(feature = "trusted-literal")]
#[must_use]
pub fn trusted_literal(value: &'static str) -> TrustedLiteral {
TrustedLiteral(value)
}
#[cfg(feature = "trusted-literal")]
#[derive(Clone, Copy)]
pub struct TrustedLiteral(&'static str);
#[cfg(feature = "trusted-literal")]
impl telemetry_safe::ToTelemetry for TrustedLiteral {
fn fmt_telemetry(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.0)
}
}