Skip to main content

self_hosted_node/
engine_backend.rs

1pub mod java_backend;
2pub mod rust_backend;
3
4use manabrew_agent_interface::prompt::AgentMessage;
5
6pub struct HostedGameOver {
7    pub game_id: String,
8    pub messages: Vec<(usize, AgentMessage)>,
9}
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub enum EngineBackendKind {
13    Manabrew,
14    Forge,
15}
16
17impl EngineBackendKind {
18    pub fn from_env() -> Self {
19        std::env::var("SELF_HOSTED_NODE_ENGINE_BACKEND")
20            .or_else(|_| std::env::var("FORGE_ROOM_ENGINE_BACKEND"))
21            .ok()
22            .and_then(|value| Self::parse(&value))
23            .unwrap_or(Self::Manabrew)
24    }
25
26    fn parse(value: &str) -> Option<Self> {
27        match value.trim().to_ascii_lowercase().as_str() {
28            "" | "manabrew" => Some(Self::Manabrew),
29            "forge" => Some(Self::Forge),
30            _ => None,
31        }
32    }
33
34    pub fn is_supported(self) -> bool {
35        matches!(self, Self::Manabrew)
36            || (matches!(self, Self::Forge)
37                && (cfg!(feature = "java-forge") || cfg!(feature = "graal-forge")))
38    }
39
40    pub fn label(self) -> &'static str {
41        match self {
42            Self::Manabrew => "manabrew",
43            Self::Forge => "forge",
44        }
45    }
46}