logform 0.7.0

logform for rust
Documentation
use super::Format;
use crate::LogInfo;
use serde_json::json;

pub struct LabelFormat {
    label: String,
    message: bool,
}

impl Default for LabelFormat {
    fn default() -> Self {
        Self::new()
    }
}

impl LabelFormat {
    pub fn new() -> Self {
        Self {
            label: String::new(),
            message: false,
        }
    }

    pub fn with_label(mut self, label: &str) -> Self {
        self.label = label.to_string();
        self
    }

    pub fn with_message(mut self, apply: bool) -> Self {
        self.message = apply;
        self
    }
}

impl Format for LabelFormat {
    type Input = LogInfo;

    fn transform(&self, mut info: LogInfo) -> Option<Self::Input> {
        if self.message {
            info.message = format!("[{}] {}", self.label, info.message);
        } else {
            info.meta.insert("label".to_string(), json!(self.label));
        }
        Some(info)
    }
}

pub fn label() -> LabelFormat {
    LabelFormat::new()
}

#[cfg(test)]
mod tests {
    #[test]
    fn test_label_format_empty_label_message() {
        let label_format = LabelFormat::new().with_label("").with_message(true);
        let info = LogInfo::new("info", "Test message");
        let result = label_format.transform(info).unwrap();
        assert_eq!(result.message, "[] Test message");
    }

    #[test]
    fn test_label_format_overwrite_existing_label_meta() {
        let label_format = LabelFormat::new()
            .with_label("NEW_LABEL")
            .with_message(false);
        let mut info = LogInfo::new("info", "Test message");
        info.meta.insert("label".to_string(), json!("OLD_LABEL"));
        let result = label_format.transform(info).unwrap();
        assert_eq!(result.meta.get("label"), Some(&json!("NEW_LABEL")));
    }

    #[test]
    fn test_label_format_empty_message() {
        let label_format = LabelFormat::new().with_label("LABEL").with_message(true);
        let info = LogInfo::new("info", "");
        let result = label_format.transform(info).unwrap();
        assert_eq!(result.message, "[LABEL] ");
    }
    use super::*;

    #[test]
    fn test_label_format_message() {
        let label_format = LabelFormat::new().with_label("MY_LABEL").with_message(true);
        let info = LogInfo::new("info", "Test message");
        let result = label_format.transform(info).unwrap();
        assert_eq!(result.message, "[MY_LABEL] Test message");
    }

    #[test]
    fn test_label_format_meta() {
        let label_format = LabelFormat::new()
            .with_label("MY_LABEL")
            .with_message(false);
        let info = LogInfo::new("info", "Test message");
        let result = label_format.transform(info).unwrap();
        assert_eq!(result.meta.get("label"), Some(&json!("MY_LABEL")));
    }
}