self_hosted_node/
engine_backend.rs1pub 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}