pub use self::unity::{UnityBinding, UnityAgentState};
pub use self::unreal::{UnrealBinding, UnrealAgentConfig};
pub use self::wasm::WasmBinding;
pub mod unity;
pub mod unreal;
pub mod wasm;
use std::sync::Arc;
use crate::agent::Agent;
use crate::config::AgentConfig;
use crate::{OxydeError, Result};
pub trait EngineBinding {
fn create_agent(&self, config_path: &str) -> Result<Arc<Agent>>;
fn create_agent_from_json(&self, json_config: &str) -> Result<Arc<Agent>>;
fn update_agent(&self, agent: &Agent, context_json: &str) -> Result<()>;
fn process_input(&self, agent: &Agent, input: &str) -> Result<String>;
fn name(&self) -> &'static str;
}
pub fn load_agent_config(config_path: &str) -> Result<AgentConfig> {
AgentConfig::from_file(config_path).map_err(|e| {
OxydeError::BindingError(format!("Failed to load agent config: {}", e))
})
}
pub fn parse_agent_config_json(json: &str) -> Result<AgentConfig> {
serde_json::from_str(json).map_err(|e| {
OxydeError::BindingError(format!("Failed to parse agent config JSON: {}", e))
})
}
pub fn parse_context_json(context_json: &str) -> Result<serde_json::Map<String, serde_json::Value>> {
serde_json::from_str(context_json).map_err(|e| {
OxydeError::BindingError(format!("Failed to parse context JSON: {}", e))
})
}