parent_ai_json_engine 0.0.2

Crate provides a JSON engine for collecting, aggregating, and managing models.
Documentation
use parent_ai_json_engine::{create_collector_from_config, Config, SchemaValidator};
use std::fs;
use std::path::Path;
use std::sync::Arc;

#[test]
fn collect_training_sample_writes_file() {
    let mut config = Config::default();
    config
        .json_engine
        .output
        .channels
        .training_samples
        .buffer_size = 1;
    config
        .json_engine
        .output
        .channels
        .training_samples
        .auto_flush_seconds = 1;

    let tmp = std::env::temp_dir().join(format!(
        "json_engine_test_training_{}",
        std::time::SystemTime::now()
            .duration_since(std::time::UNIX_EPOCH)
            .unwrap()
            .as_nanos()
    ));
    fs::create_dir_all(&tmp).expect("create_dir_all tmp training");

    let schemas_dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("schemas");
    let validator = SchemaValidator::new(&schemas_dir).expect("validator init");
    let collector = create_collector_from_config(Arc::new(validator), tmp.clone(), &config)
        .expect("create collector");

    let sample = r#"{"sample":"x"}"#.to_string();
    collector
        .collect_training_sample(sample)
        .expect("collect training");

    collector.flush_all().expect("flush_all");

    let training_file = tmp.join(&config.json_engine.output.channels.training_samples.filename);
    assert!(training_file.exists());
    let content = fs::read_to_string(&training_file).expect("read training file");
    assert!(content.contains("sample"));

    if let Err(e) = fs::remove_dir_all(&tmp) {
        eprintln!("cleanup failed: {}", e);
    }
}