use crux_core::{
Core,
bridge::{Bridge, EffectId},
};
use crate::App;
#[cfg_attr(feature = "uniffi", derive(uniffi::Object))]
pub struct CoreFFI {
core: Bridge<App>,
}
impl Default for CoreFFI {
fn default() -> Self {
Self::new()
}
}
#[cfg_attr(feature = "uniffi", uniffi::export)]
impl CoreFFI {
#[cfg_attr(feature = "uniffi", uniffi::constructor)]
#[must_use]
pub fn new() -> Self {
Self {
core: Bridge::new(Core::new()),
}
}
#[must_use]
pub fn update(&self, data: &[u8]) -> Vec<u8> {
let mut effects = Vec::new();
match self.core.update(data, &mut effects) {
Ok(()) => effects,
Err(e) => panic!("{e}"),
}
}
#[must_use]
pub fn resolve(&self, id: u32, data: &[u8]) -> Vec<u8> {
let mut effects = Vec::new();
match self.core.resolve(EffectId(id), data, &mut effects) {
Ok(()) => effects,
Err(e) => panic!("{e}"),
}
}
#[must_use]
pub fn view(&self) -> Vec<u8> {
let mut view_model = Vec::new();
match self.core.view(&mut view_model) {
Ok(()) => view_model,
Err(e) => panic!("{e}"),
}
}
}