self-hosted-node 0.4.3

Headless manabrew engine node for hosting AI games
pub mod java_backend;
pub mod rust_backend;

use manabrew_agent_interface::prompt::AgentMessage;

pub struct HostedGameOver {
    pub game_id: String,
    pub messages: Vec<(usize, AgentMessage)>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EngineBackendKind {
    Manabrew,
    Forge,
}

impl EngineBackendKind {
    pub fn from_env() -> Self {
        std::env::var("SELF_HOSTED_NODE_ENGINE_BACKEND")
            .or_else(|_| std::env::var("FORGE_ROOM_ENGINE_BACKEND"))
            .ok()
            .and_then(|value| Self::parse(&value))
            .unwrap_or(Self::Manabrew)
    }

    fn parse(value: &str) -> Option<Self> {
        match value.trim().to_ascii_lowercase().as_str() {
            "" | "manabrew" => Some(Self::Manabrew),
            "forge" => Some(Self::Forge),
            _ => None,
        }
    }

    pub fn is_supported(self) -> bool {
        matches!(self, Self::Manabrew)
            || (matches!(self, Self::Forge)
                && (cfg!(feature = "java-forge") || cfg!(feature = "graal-forge")))
    }

    pub fn label(self) -> &'static str {
        match self {
            Self::Manabrew => "manabrew",
            Self::Forge => "forge",
        }
    }
}