jsi_sys/ffi/
host.rs

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::*;