bijux-dag-runtime 0.4.1

Execution engine, replay semantics, and runtime policy layer for Bijux DAG graphs.
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BackendCapabilityQuery {
    pub backend: String,
    pub status: String,
    pub supports_replay: bool,
    pub supports_stream_capture: bool,
}

pub fn local_backend_capability() -> BackendCapabilityQuery {
    BackendCapabilityQuery {
        backend: "local".to_string(),
        status: "implemented".to_string(),
        supports_replay: true,
        supports_stream_capture: true,
    }
}

pub fn kubernetes_backend_capability() -> BackendCapabilityQuery {
    BackendCapabilityQuery {
        backend: "kubernetes".to_string(),
        status: "implemented".to_string(),
        supports_replay: true,
        supports_stream_capture: true,
    }
}

pub fn slurm_backend_capability() -> BackendCapabilityQuery {
    BackendCapabilityQuery {
        backend: "slurm".to_string(),
        status: "implemented".to_string(),
        supports_replay: true,
        supports_stream_capture: true,
    }
}

pub fn hpc_backend_capability() -> BackendCapabilityQuery {
    BackendCapabilityQuery {
        backend: "hpc".to_string(),
        status: "simulated".to_string(),
        supports_replay: true,
        supports_stream_capture: true,
    }
}

pub fn remote_backend_capability() -> BackendCapabilityQuery {
    BackendCapabilityQuery {
        backend: "remote".to_string(),
        status: "simulated".to_string(),
        supports_replay: true,
        supports_stream_capture: true,
    }
}

pub fn query_backend_capability(name: &str) -> Option<BackendCapabilityQuery> {
    match name {
        "local" => Some(local_backend_capability()),
        "k8s" | "kubernetes" => Some(kubernetes_backend_capability()),
        "slurm" => Some(slurm_backend_capability()),
        "hpc" => Some(hpc_backend_capability()),
        "remote" | "distributed" => Some(remote_backend_capability()),
        _ => None,
    }
}

#[cfg(test)]
mod tests {
    use super::{
        hpc_backend_capability, kubernetes_backend_capability, local_backend_capability,
        query_backend_capability, remote_backend_capability, slurm_backend_capability,
    };

    #[test]
    fn local_and_modeled_capability_queries_are_stable() {
        assert_eq!(local_backend_capability(), local_backend_capability());
        assert_eq!(kubernetes_backend_capability(), kubernetes_backend_capability());
        assert_eq!(slurm_backend_capability(), slurm_backend_capability());
        assert_eq!(hpc_backend_capability(), hpc_backend_capability());
        assert_eq!(remote_backend_capability(), remote_backend_capability());
    }

    #[test]
    fn unknown_backend_query_returns_none() {
        assert!(query_backend_capability("unknown").is_none());
    }
}