1#[cxx::bridge(namespace = "tests")] 2pub mod ffi { 3 struct Job { 4 raw: u32, 5 } 6 7 unsafe extern "C++" { 8 include!("tests/ffi/tests.h"); 9 10 type C = crate::ffi::C; 11 12 fn c_take_unique_ptr(c: UniquePtr<C>); 13 } 14 15 impl Vec<Job> {} 16} 17 18#[cxx::bridge(namespace = "tests")] 19pub mod ffi2 { 20 unsafe extern "C++" { 21 include!("tests/ffi/tests.h"); 22 23 type D = crate::other::D; 24 type E = crate::other::E; 25 #[namespace = "F"] 26 type F = crate::other::f::F; 27 #[namespace = "G"] 28 type G = crate::other::G; 29 30 #[namespace = "H"] 31 type H; 32 33 fn c_take_trivial_ptr(d: UniquePtr<D>); 34 fn c_take_trivial_ref(d: &D); 35 fn c_take_trivial_mut_ref(d: &mut D); 36 fn c_take_trivial_pin_ref(d: Pin<&D>); 37 fn c_take_trivial_pin_mut_ref(d: Pin<&mut D>); 38 fn c_take_trivial_ref_method(self: &D); 39 fn c_take_trivial_mut_ref_method(self: &mut D); 40 fn c_take_trivial(d: D); 41 fn c_take_trivial_ns_ptr(g: UniquePtr<G>); 42 fn c_take_trivial_ns_ref(g: &G); 43 fn c_take_trivial_ns(g: G); 44 fn c_take_opaque_ptr(e: UniquePtr<E>); 45 fn c_take_opaque_ref(e: &E); 46 fn c_take_opaque_ref_method(self: &E); 47 fn c_take_opaque_mut_ref_method(self: Pin<&mut E>); 48 fn c_take_opaque_ns_ptr(e: UniquePtr<F>); 49 fn c_take_opaque_ns_ref(e: &F); 50 fn c_return_trivial_ptr() -> UniquePtr<D>; 51 fn c_return_trivial() -> D; 52 fn c_return_trivial_ns_ptr() -> UniquePtr<G>; 53 fn c_return_trivial_ns() -> G; 54 fn c_return_opaque_ptr() -> UniquePtr<E>; 55 fn c_return_opaque_mut_pin(e: Pin<&mut E>) -> Pin<&mut E>; 56 fn c_return_ns_opaque_ptr() -> UniquePtr<F>; 57 fn c_return_ns_unique_ptr() -> UniquePtr<H>; 58 fn c_take_ref_ns_c(h: &H); 59 60 #[namespace = "other"] 61 fn ns_c_take_trivial(d: D); 62 #[namespace = "other"] 63 fn ns_c_return_trivial() -> D; 64 65 #[namespace = "I"] 66 type I; 67 68 fn get(self: &I) -> u32; 69 70 #[namespace = "I"] 71 fn ns_c_return_unique_ptr_ns() -> UniquePtr<I>; 72 } 73 74 impl UniquePtr<D> {} 75 impl UniquePtr<E> {} 76 impl UniquePtr<F> {} 77 impl UniquePtr<G> {} 78} 79