wip ffi callback
This commit is contained in:
parent
1942d22451
commit
acef87c56b
2 changed files with 25 additions and 38 deletions
|
@ -1,17 +1,38 @@
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
|
|
||||||
|
use sys::RegisterCallback;
|
||||||
|
|
||||||
pub mod sys {
|
pub mod sys {
|
||||||
use std::ffi::c_char;
|
use std::ffi::c_char;
|
||||||
|
|
||||||
|
use crate::RegisterContext;
|
||||||
|
|
||||||
|
pub type RegisterCallback = fn(*mut RegisterContext) -> ();
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn register_endpoint(url_len: u64, url: *const c_char);
|
pub fn register_endpoint(
|
||||||
|
url_len: u64,
|
||||||
|
url: *const c_char,
|
||||||
|
callback: *mut RegisterCallback,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn register_endpoint(url: impl AsRef<str>) {
|
pub struct RegisterContext {}
|
||||||
|
|
||||||
|
pub fn register_endpoint(
|
||||||
|
url: impl AsRef<str>,
|
||||||
|
callback: fn(&RegisterContext) -> (),
|
||||||
|
) {
|
||||||
let url = url.as_ref();
|
let url = url.as_ref();
|
||||||
let url_cstr = CString::new(url).unwrap();
|
let url_cstr = CString::new(url).unwrap();
|
||||||
let result =
|
let mut callback2 = |ctx: *mut RegisterContext| callback(&*ctx);
|
||||||
unsafe { sys::register_endpoint(url.len() as u64, url_cstr.into_raw()) };
|
let result = unsafe {
|
||||||
|
sys::register_endpoint(
|
||||||
|
url.len() as u64,
|
||||||
|
url_cstr.into_raw(),
|
||||||
|
&mut callback2 as *mut RegisterCallback,
|
||||||
|
)
|
||||||
|
};
|
||||||
println!("Result: {:?}", result);
|
println!("Result: {:?}", result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,40 +138,6 @@ impl AppState {
|
||||||
.context("Could not get typed function")?;
|
.context("Could not get typed function")?;
|
||||||
hello.call(&mut store, ()).context("Could not call")?;
|
hello.call(&mut store, ()).context("Could not call")?;
|
||||||
|
|
||||||
// let mut sources = Sources::new();
|
|
||||||
// sources
|
|
||||||
// .insert(Source::new("register.rn", register_script).into_diagnostic()?)
|
|
||||||
// .into_diagnostic()?;
|
|
||||||
|
|
||||||
// let mut diagnostics = Diagnostics::new();
|
|
||||||
// let register_script_unit = prepare(&mut sources)
|
|
||||||
// .with_diagnostics(&mut diagnostics)
|
|
||||||
// .build();
|
|
||||||
// if !diagnostics.is_empty() {
|
|
||||||
// let mut writer = StandardStream::stderr(ColorChoice::Always);
|
|
||||||
// diagnostics.emit(&mut writer, &sources).into_diagnostic()?;
|
|
||||||
// }
|
|
||||||
// let register_script_unit =
|
|
||||||
// Arc::new(register_script_unit.into_diagnostic()?);
|
|
||||||
|
|
||||||
// let module = Module::new();
|
|
||||||
// // let mut ctx = Context::new();
|
|
||||||
// let mut ctx = Context::with_default_modules().into_diagnostic()?;
|
|
||||||
// ctx.install(module).into_diagnostic()?;
|
|
||||||
|
|
||||||
// let rt_ctx = ctx.runtime().into_diagnostic()?;
|
|
||||||
// let ctx_arc = Arc::new(rt_ctx);
|
|
||||||
// let mut vm = Vm::new(ctx_arc, register_script_unit);
|
|
||||||
|
|
||||||
// let main = Hash::type_hash(["main"]);
|
|
||||||
// let result = vm
|
|
||||||
// .execute(main, ())
|
|
||||||
// .into_diagnostic()?
|
|
||||||
// .complete()
|
|
||||||
// .into_result()
|
|
||||||
// .into_diagnostic()?;
|
|
||||||
// println!("Executed. {result:?}");
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue