poet 0.7.0

Static site generator with optional MCP server and LLM SEO optimizations
Documentation
use std::cmp::Ordering;

use serde::Deserialize;
use serde::Serialize;

#[repr(u8)]
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
pub enum LogLevel {
    #[serde(rename = "debug")]
    Debug = 0,
    #[serde(rename = "info")]
    Info = 1,
    #[serde(rename = "notice")]
    Notice = 2,
    #[serde(rename = "warning")]
    Warning = 3,
    #[serde(rename = "error")]
    Error = 4,
    #[serde(rename = "critical")]
    Critical = 5,
    #[serde(rename = "alert")]
    Alert = 6,
    #[serde(rename = "emergency")]
    Emergency = 7,
}

impl Ord for LogLevel {
    fn cmp(&self, other: &Self) -> Ordering {
        (self.clone() as u8).cmp(&(other.clone() as u8))
    }
}

impl PartialOrd for LogLevel {
    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
        Some(self.cmp(other))
    }
}

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

    #[test]
    fn sorts_levels_from_least_to_most_severe() {
        let mut levels = vec![
            LogLevel::Emergency,
            LogLevel::Debug,
            LogLevel::Warning,
            LogLevel::Info,
            LogLevel::Alert,
            LogLevel::Notice,
            LogLevel::Critical,
            LogLevel::Error,
        ];

        levels.sort();

        assert_eq!(
            levels,
            vec![
                LogLevel::Debug,
                LogLevel::Info,
                LogLevel::Notice,
                LogLevel::Warning,
                LogLevel::Error,
                LogLevel::Critical,
                LogLevel::Alert,
                LogLevel::Emergency,
            ]
        );
    }

    #[test]
    fn compares_levels_by_severity() {
        assert!(LogLevel::Debug < LogLevel::Info);
        assert!(LogLevel::Emergency > LogLevel::Warning);
    }
}