logtail-rust 0.3.0

Logtail http client wrapper
Documentation
use serde::Serialize;
use strum_macros::{Display, EnumString};

#[derive(Debug, EnumString, Display, PartialEq, Serialize, Clone)]
pub enum LogLevel {
    #[strum(serialize = "info")]
    Info,
    #[strum(serialize = "warn")]
    Warn,
    #[strum(serialize = "error")]
    Error,
    #[strum(serialize = "debug")]
    Debug,
}

#[cfg(test)]
mod tests {
    use super::*;
    use std::str::FromStr;

    #[test]
    fn display_all_variants() {
        assert_eq!(LogLevel::Info.to_string(), "info");
        assert_eq!(LogLevel::Warn.to_string(), "warn");
        assert_eq!(LogLevel::Error.to_string(), "error");
        assert_eq!(LogLevel::Debug.to_string(), "debug");
    }

    #[test]
    fn parse_valid_variants() {
        assert_eq!(LogLevel::from_str("info").unwrap(), LogLevel::Info);
        assert_eq!(LogLevel::from_str("warn").unwrap(), LogLevel::Warn);
        assert_eq!(LogLevel::from_str("error").unwrap(), LogLevel::Error);
        assert_eq!(LogLevel::from_str("debug").unwrap(), LogLevel::Debug);
    }

    #[test]
    fn parse_invalid_returns_err() {
        assert!(LogLevel::from_str("unknown").is_err());
        assert!(LogLevel::from_str("INFO").is_err());
        assert!(LogLevel::from_str("").is_err());
    }

    #[test]
    fn equality() {
        assert_eq!(LogLevel::Info, LogLevel::Info);
        assert_ne!(LogLevel::Info, LogLevel::Warn);
        assert_ne!(LogLevel::Error, LogLevel::Debug);
    }

    #[test]
    fn serde_json_serialize() {
        assert_eq!(serde_json::to_string(&LogLevel::Info).unwrap(), "\"Info\"");
        assert_eq!(serde_json::to_string(&LogLevel::Warn).unwrap(), "\"Warn\"");
        assert_eq!(
            serde_json::to_string(&LogLevel::Error).unwrap(),
            "\"Error\""
        );
        assert_eq!(
            serde_json::to_string(&LogLevel::Debug).unwrap(),
            "\"Debug\""
        );
    }
}