tracing_forest/tree/
ser.rs1use crate::tree::FieldSet;
2#[cfg(feature = "chrono")]
3use chrono::{DateTime, Utc};
4use serde::ser::{SerializeMap, Serializer};
5use std::time::Duration;
6use tracing::Level;
7
8#[allow(clippy::trivially_copy_pass_by_ref)]
9pub(super) fn level<S: Serializer>(level: &Level, serializer: S) -> Result<S::Ok, S::Error> {
10 serializer.serialize_str(level.as_str())
11}
12
13pub(super) fn nanos<S: Serializer>(duration: &Duration, serializer: S) -> Result<S::Ok, S::Error> {
14 serializer.serialize_u128(duration.as_nanos())
15}
16
17pub(super) fn fields<S: Serializer>(fields: &FieldSet, serializer: S) -> Result<S::Ok, S::Error> {
18 let mut model = serializer.serialize_map(Some(fields.len()))?;
19 for field in fields {
20 model.serialize_entry(field.key(), field.value())?;
21 }
22 model.end()
23}
24
25#[cfg(feature = "chrono")]
26pub(super) fn timestamp<S: Serializer>(
27 timestamp: &DateTime<Utc>,
28 serializer: S,
29) -> Result<S::Ok, S::Error> {
30 serializer.serialize_str(×tamp.to_rfc3339())
31}