tea-protocol 0.1.0

Canonical protocol types for the tea-rs project
Documentation
use std::str::FromStr as _;

use tea_protocol::ReasoningEffort;

#[test]
fn reasoning_effort_has_stable_wire_values_and_order() {
    let cases = [
        (ReasoningEffort::Off, "off"),
        (ReasoningEffort::Minimal, "minimal"),
        (ReasoningEffort::Low, "low"),
        (ReasoningEffort::Medium, "medium"),
        (ReasoningEffort::High, "high"),
        (ReasoningEffort::ExtraHigh, "xhigh"),
        (ReasoningEffort::Maximum, "max"),
    ];

    for (effort, wire) in cases {
        assert_eq!(effort.as_str(), wire);
        assert_eq!(effort.to_string(), wire);
        assert_eq!(ReasoningEffort::from_str(wire).unwrap(), effort);
        assert_eq!(
            serde_json::to_string(&effort).unwrap(),
            format!(r#""{wire}""#)
        );
        assert_eq!(
            serde_json::from_str::<ReasoningEffort>(&format!(r#""{wire}""#)).unwrap(),
            effort
        );
    }

    assert_eq!(ReasoningEffort::ALL, cases.map(|(effort, _)| effort));
    assert!(ReasoningEffort::High < ReasoningEffort::ExtraHigh);
    assert!(ReasoningEffort::ExtraHigh < ReasoningEffort::Maximum);
    assert!(ReasoningEffort::from_str("ultra").is_err());
}

#[test]
fn shortcut_levels_exclude_explicit_extended_levels() {
    assert_eq!(
        ReasoningEffort::SHORTCUT_LEVELS,
        [
            ReasoningEffort::Off,
            ReasoningEffort::Minimal,
            ReasoningEffort::Low,
            ReasoningEffort::Medium,
            ReasoningEffort::High,
        ]
    );
}