erebus 0.1.1

A CLI message generation library
Documentation
use yansi::hyperlink::HyperlinkExt;

use crate::{message::Identifier, severity::Severity, style::Style};

pub fn identifier(text: &Identifier, severity: Option<&Severity>, style: &Style) -> String {
    let mut result = String::new();

    result.push(style.characters.lbox);
    if let Some(url) = text.url() {
        result.push_str(&text.as_str().link(url).to_string());
    } else {
        result.push_str(text.as_str());
    }
    result.push(style.characters.rbox);

    if let Some(severity) = severity {
        result = severity.colorize(&result);
    }

    result
}

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

    #[test]
    fn test_identifier() {
        let text = Identifier::Simple("test".to_string());
        let style = Style::default();

        assert_eq!(identifier(&text, None, &style), "[test]");
        assert_eq!(
            identifier(&text, Some(&Severity::Error), &style),
            "\u{1b}[31m[test]\u{1b}[0m"
        );
        assert_eq!(
            identifier(
                &text,
                Some(&Severity::Custom("custom".to_string(), (0, 100, 200))),
                &style
            ),
            "\u{1b}[38;2;0;100;200m[test]\u{1b}[0m"
        );
    }
}