#[cxx::bridge]
pub mod ffi {
extern "Rust" {
#[derive(ExternType)]
pub type AssemblerConfig_r;
fn resolve_symbol(&self, name: &str) -> i64;
}
}
#[allow(non_camel_case_types)]
pub struct AssemblerConfig_r {
resolver: Box<dyn Fn(&str) -> Option<u64> + Send + Sync + 'static>,
}
impl AssemblerConfig_r {
pub fn new<F>(resolver: F) -> Box<Self>
where
F: Fn(&str) -> Option<u64> + Send + Sync + 'static,
{
Box::new(Self {
resolver: Box::new(resolver),
})
}
fn resolve_symbol(&self, name: &str) -> i64 {
match (self.resolver)(name) {
Some(value) => value as i64,
None => -1,
}
}
}