logger2 0.1.5

A modern, feature-rich replacement for the classic `logger` CLI: syslog (local/remote, RFC3164 & RFC5424), truecolor hex output, emoji, JSON, and a fully configurable TOML config file.
Documentation
pub mod cli;
pub mod color;
pub mod config;
pub mod error;
pub mod level;
pub mod output;
pub mod syslog;

use crate::error::{Logger2Error, Result};

/// Parses a `key=value` string into a tuple, used for `--kv` structured
/// fields.
pub fn parse_kv(input: &str) -> Result<(String, String)> {
    let (k, v) = input
        .split_once('=')
        .ok_or_else(|| Logger2Error::InvalidKeyValue(input.to_string()))?;
    if k.is_empty() {
        return Err(Logger2Error::InvalidKeyValue(input.to_string()));
    }
    Ok((k.to_string(), v.to_string()))
}

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

    #[test]
    fn parse_kv_basic() {
        assert_eq!(
            parse_kv("user=alice").unwrap(),
            ("user".to_string(), "alice".to_string())
        );
    }

    #[test]
    fn parse_kv_value_with_equals() {
        assert_eq!(
            parse_kv("query=a=b").unwrap(),
            ("query".to_string(), "a=b".to_string())
        );
    }

    #[test]
    fn parse_kv_missing_equals_errors() {
        assert!(parse_kv("nope").is_err());
    }
}