use crate::{
ContextValue, StaticCowStr,
guard::LogContextGuard,
stack::{CONTEXT_STACK, ContextRecords},
};
#[derive(Debug, Clone)]
pub struct LogContext(pub(crate) ContextRecords);
impl LogContext {
#[must_use]
pub const fn new() -> Self {
Self(ContextRecords::new())
}
#[must_use]
pub fn record(mut self, key: impl Into<StaticCowStr>, value: impl Into<ContextValue>) -> Self {
let property = (key.into(), value.into());
self.0.push(property);
self
}
pub fn add_record(key: impl Into<StaticCowStr>, value: impl Into<ContextValue>) {
let property = (key.into(), value.into());
CONTEXT_STACK.with(|stack| {
if let Some(mut top) = stack.top_mut() {
top.push(property);
}
});
}
#[must_use]
pub fn enter<'a>(self) -> LogContextGuard<'a> {
LogContextGuard::enter(self)
}
}
impl Default for LogContext {
fn default() -> Self {
Self::new()
}
}