greentic-component 0.5.2

High-level component loader and store for Greentic components
Documentation
use greentic_component::limits::{LimitError, LimitOverrides, Limits, defaults_dev, merge};

#[test]
fn merge_respects_overrides() {
    let defaults = defaults_dev();
    let overrides = LimitOverrides {
        memory_mb: Some(defaults.memory_mb * 2),
        wall_time_ms: None,
        fuel: Some(Some(0)),
        files: Some(None),
    };

    let merged = merge(Some(&overrides), &defaults);
    assert_eq!(merged.memory_mb, defaults.memory_mb * 2);
    assert_eq!(merged.wall_time_ms, defaults.wall_time_ms);
    assert_eq!(merged.fuel, Some(0));
    assert!(merged.files.is_none());
}

#[test]
fn validate_rejects_zero_limits() {
    let limits = Limits {
        memory_mb: 0,
        wall_time_ms: 10,
        fuel: None,
        files: None,
    };
    match limits.validate() {
        Err(LimitError::NonZero { field, .. }) => assert_eq!(field, "memory_mb"),
        other => panic!("expected NonZero error, got {other:?}"),
    }
}