gsm-core 0.4.45

Core types and platform abstractions for the Greentic messaging runtime.
Documentation
use gsm_core::render_plan::{RenderPlan, RenderTier, RenderWarning};
use serde_json::json;

#[test]
fn render_plan_serializes_and_roundtrips() {
    let plan = RenderPlan {
        tier: RenderTier::TierB,
        summary_text: Some("Summarized body".to_string()),
        actions: vec!["approve".into(), "reject".into()],
        attachments: vec!["https://example.com/attachment".into()],
        warnings: vec![RenderWarning {
            code: "text_truncated".into(),
            message: Some("Body trimmed to 256 chars".into()),
            path: Some("/body".into()),
        }],
        debug: Some(json!({
            "source": "unit_test",
            "meta": { "id": 42 }
        })),
    };

    let json_value = serde_json::to_value(&plan).expect("serialize");
    let expected = json!({
        "tier": "tier_b",
        "summary_text": "Summarized body",
        "actions": ["approve", "reject"],
        "attachments": ["https://example.com/attachment"],
        "warnings": [{
            "code": "text_truncated",
            "message": "Body trimmed to 256 chars",
            "path": "/body",
        }],
        "debug": {
            "source": "unit_test",
            "meta": { "id": 42 },
        },
    });
    assert_eq!(json_value, expected);

    let json_text = serde_json::to_string_pretty(&plan).expect("serialize to string");
    let roundtrip: RenderPlan = serde_json::from_str(&json_text).expect("deserialize");
    assert_eq!(roundtrip, plan);
}