wait-human 0.1.1

Rust client library for WaitHuman - pause execution and request human input on demand
Documentation
use std::fs;
use std::path::PathBuf;

fn main() {
    let source = PathBuf::from("../app/backend/src/shared_types.rs");
    let dest = PathBuf::from("src/shared_types.rs");

    // Only regenerate if the source file exists (development mode)
    // When building from a published package, shared_types.rs is already included
    if source.exists() {
        let content = fs::read_to_string(&source)
            .expect("Failed to read shared_types.rs from ../app/backend/src/shared_types.rs");

        let transformed = transform_shared_types(content);

        fs::write(&dest, transformed).expect("Failed to write src/shared_types.rs");

        println!("cargo:rerun-if-changed={}", source.display());
    } else {
        // Verify that shared_types.rs exists in the package
        if !dest.exists() {
            panic!(
                "shared_types.rs not found. This file should be generated from the backend or included in the package."
            );
        }
    }
}

fn transform_shared_types(content: String) -> String {
    use regex::Regex;

    // Remove all use statements
    let re_use = Regex::new(r"use [^;]+;\n").unwrap();
    let content = re_use.replace_all(&content, "");

    // Replace all #[derive(...)] with standard derives
    let re_derive = Regex::new(r"#\[derive\([^\]]+\)\]").unwrap();
    let content =
        re_derive.replace_all(&content, "#[derive(Serialize, Deserialize, Clone, Debug)]");

    // Add header comment and imports
    let header = "// This file is auto-generated by build.rs from ../app/backend/src/shared_types.rs\n// Do not edit manually - changes will be overwritten\n\n";
    let imports = "use serde::{Deserialize, Serialize};\nuse chrono::{DateTime, Utc};\n\n";
    format!("{}{}{}", header, imports, content)
}