use crate::{RegistryEntry, Service, ServiceError, Value};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum LogLevel {
Debug,
Info,
Warn,
Error,
}
pub trait GameAPI {
fn registry_domain(&self, name: &str) -> Result<Vec<RegistryEntry>, ServiceError>;
fn registry_file(&self, domain: &str, filename: &str) -> Result<Vec<u8>, ServiceError>;
fn read_content_file(&self, path: &str) -> Result<Vec<u8>, ServiceError>;
fn register_service(
&mut self,
domain: &str,
service: Box<dyn Service>,
) -> Result<(), ServiceError>;
fn get_service(&self, domain: &str) -> Result<&dyn Service, ServiceError>;
fn call_service(
&self,
domain: &str,
method: &str,
args: &[Value],
) -> Result<Value, ServiceError>;
fn has_service(&self, domain: &str) -> bool;
fn get_component(&self, entity: u64, type_name: &str) -> Result<Vec<u8>, ServiceError>;
fn set_component(
&mut self,
entity: u64,
type_name: &str,
data: &[u8],
) -> Result<(), ServiceError>;
fn query_entities(&self, component_name: &str) -> Result<Vec<u64>, ServiceError>;
fn spawn_entity(&mut self, archetype: &str) -> Result<u64, ServiceError>;
fn despawn_entity(&mut self, entity: u64) -> Result<(), ServiceError>;
fn read_config(&self, key: &str) -> Result<Value, ServiceError>;
fn read_keybinds(&self) -> Result<Value, ServiceError>;
fn register_save_data(
&mut self,
domain: &str,
data: Vec<u8>,
) -> Result<(), ServiceError>;
fn load_save_data(&self, domain: &str) -> Result<Option<Vec<u8>>, ServiceError>;
fn emit_event(&self, name: &str, data: &Value) -> Result<(), ServiceError>;
fn log(&self, level: LogLevel, message: &str);
}