1use crate::shim::{rho_get, rho_properties, rho_set, RustHostObject};
2
3#[cxx::bridge]
4pub(crate) mod ffi {
5 #[namespace = "jsi_rs::ffi"]
6 unsafe extern "C++" {
7 include!("host.h");
8
9 #[namespace = "facebook::jsi"]
10 pub type HostObject = crate::ffi::base::HostObject;
11 #[namespace = "facebook::jsi"]
12 pub type Runtime = crate::ffi::base::Runtime;
13 #[cxx_name = "Value"]
14 #[namespace = "facebook::jsi"]
15 pub type JsiValue = crate::ffi::base::JsiValue;
16 #[namespace = "facebook::jsi"]
17 pub type PropNameID = crate::ffi::base::PropNameID;
18
19 pub type CxxHostObject;
20 pub fn CxxHostObject_create(rho: Box<RustHostObject<'_>>) -> UniquePtr<CxxHostObject>;
21
22 pub fn CxxHostObject_toHostObjectU(ptr: UniquePtr<CxxHostObject>) -> UniquePtr<HostObject>;
23 pub fn CxxHostObject_fromHostObjectU(
24 ptr: UniquePtr<HostObject>,
25 ) -> UniquePtr<CxxHostObject>;
26
27 pub fn CxxHostObject_toHostObjectS(ptr: SharedPtr<CxxHostObject>) -> SharedPtr<HostObject>;
28 pub fn CxxHostObject_fromHostObjectS(
29 ptr: SharedPtr<HostObject>,
30 ) -> SharedPtr<CxxHostObject>;
31
32 pub fn CxxHostObject_getInner(ptr: &CxxHostObject) -> &RustHostObject;
33 pub fn CxxHostObject_getInnerMut(ptr: Pin<&mut CxxHostObject>) -> &mut RustHostObject;
34 }
35
36 #[namespace = "jsi_rs::ffi"]
37 extern "Rust" {
38 type RustHostObject<'a>;
39
40 unsafe fn rho_get<'a>(
41 _self: &mut RustHostObject<'a>,
42 rt: Pin<&mut Runtime>,
43 name: &PropNameID,
44 ) -> Result<UniquePtr<JsiValue>>;
45 unsafe fn rho_set<'a>(
46 _self: &mut RustHostObject<'a>,
47 rt: Pin<&mut Runtime>,
48 name: &PropNameID,
49 value: &JsiValue,
50 ) -> Result<()>;
51 unsafe fn rho_properties<'a>(
52 _self: &mut RustHostObject<'a>,
53 rt: Pin<&mut Runtime>,
54 ) -> UniquePtr<CxxVector<PropNameID>>;
55 }
56}
57
58pub use ffi::*;