133d722a9Sopenharmony_ci#[cxx::bridge(namespace = "tests")]
233d722a9Sopenharmony_cipub mod ffi {
333d722a9Sopenharmony_ci    struct Job {
433d722a9Sopenharmony_ci        raw: u32,
533d722a9Sopenharmony_ci    }
633d722a9Sopenharmony_ci
733d722a9Sopenharmony_ci    unsafe extern "C++" {
833d722a9Sopenharmony_ci        include!("tests/ffi/tests.h");
933d722a9Sopenharmony_ci
1033d722a9Sopenharmony_ci        type C = crate::ffi::C;
1133d722a9Sopenharmony_ci
1233d722a9Sopenharmony_ci        fn c_take_unique_ptr(c: UniquePtr<C>);
1333d722a9Sopenharmony_ci    }
1433d722a9Sopenharmony_ci
1533d722a9Sopenharmony_ci    impl Vec<Job> {}
1633d722a9Sopenharmony_ci}
1733d722a9Sopenharmony_ci
1833d722a9Sopenharmony_ci#[cxx::bridge(namespace = "tests")]
1933d722a9Sopenharmony_cipub mod ffi2 {
2033d722a9Sopenharmony_ci    unsafe extern "C++" {
2133d722a9Sopenharmony_ci        include!("tests/ffi/tests.h");
2233d722a9Sopenharmony_ci
2333d722a9Sopenharmony_ci        type D = crate::other::D;
2433d722a9Sopenharmony_ci        type E = crate::other::E;
2533d722a9Sopenharmony_ci        #[namespace = "F"]
2633d722a9Sopenharmony_ci        type F = crate::other::f::F;
2733d722a9Sopenharmony_ci        #[namespace = "G"]
2833d722a9Sopenharmony_ci        type G = crate::other::G;
2933d722a9Sopenharmony_ci
3033d722a9Sopenharmony_ci        #[namespace = "H"]
3133d722a9Sopenharmony_ci        type H;
3233d722a9Sopenharmony_ci
3333d722a9Sopenharmony_ci        fn c_take_trivial_ptr(d: UniquePtr<D>);
3433d722a9Sopenharmony_ci        fn c_take_trivial_ref(d: &D);
3533d722a9Sopenharmony_ci        fn c_take_trivial_mut_ref(d: &mut D);
3633d722a9Sopenharmony_ci        fn c_take_trivial_pin_ref(d: Pin<&D>);
3733d722a9Sopenharmony_ci        fn c_take_trivial_pin_mut_ref(d: Pin<&mut D>);
3833d722a9Sopenharmony_ci        fn c_take_trivial_ref_method(self: &D);
3933d722a9Sopenharmony_ci        fn c_take_trivial_mut_ref_method(self: &mut D);
4033d722a9Sopenharmony_ci        fn c_take_trivial(d: D);
4133d722a9Sopenharmony_ci        fn c_take_trivial_ns_ptr(g: UniquePtr<G>);
4233d722a9Sopenharmony_ci        fn c_take_trivial_ns_ref(g: &G);
4333d722a9Sopenharmony_ci        fn c_take_trivial_ns(g: G);
4433d722a9Sopenharmony_ci        fn c_take_opaque_ptr(e: UniquePtr<E>);
4533d722a9Sopenharmony_ci        fn c_take_opaque_ref(e: &E);
4633d722a9Sopenharmony_ci        fn c_take_opaque_ref_method(self: &E);
4733d722a9Sopenharmony_ci        fn c_take_opaque_mut_ref_method(self: Pin<&mut E>);
4833d722a9Sopenharmony_ci        fn c_take_opaque_ns_ptr(e: UniquePtr<F>);
4933d722a9Sopenharmony_ci        fn c_take_opaque_ns_ref(e: &F);
5033d722a9Sopenharmony_ci        fn c_return_trivial_ptr() -> UniquePtr<D>;
5133d722a9Sopenharmony_ci        fn c_return_trivial() -> D;
5233d722a9Sopenharmony_ci        fn c_return_trivial_ns_ptr() -> UniquePtr<G>;
5333d722a9Sopenharmony_ci        fn c_return_trivial_ns() -> G;
5433d722a9Sopenharmony_ci        fn c_return_opaque_ptr() -> UniquePtr<E>;
5533d722a9Sopenharmony_ci        fn c_return_opaque_mut_pin(e: Pin<&mut E>) -> Pin<&mut E>;
5633d722a9Sopenharmony_ci        fn c_return_ns_opaque_ptr() -> UniquePtr<F>;
5733d722a9Sopenharmony_ci        fn c_return_ns_unique_ptr() -> UniquePtr<H>;
5833d722a9Sopenharmony_ci        fn c_take_ref_ns_c(h: &H);
5933d722a9Sopenharmony_ci
6033d722a9Sopenharmony_ci        #[namespace = "other"]
6133d722a9Sopenharmony_ci        fn ns_c_take_trivial(d: D);
6233d722a9Sopenharmony_ci        #[namespace = "other"]
6333d722a9Sopenharmony_ci        fn ns_c_return_trivial() -> D;
6433d722a9Sopenharmony_ci
6533d722a9Sopenharmony_ci        #[namespace = "I"]
6633d722a9Sopenharmony_ci        type I;
6733d722a9Sopenharmony_ci
6833d722a9Sopenharmony_ci        fn get(self: &I) -> u32;
6933d722a9Sopenharmony_ci
7033d722a9Sopenharmony_ci        #[namespace = "I"]
7133d722a9Sopenharmony_ci        fn ns_c_return_unique_ptr_ns() -> UniquePtr<I>;
7233d722a9Sopenharmony_ci    }
7333d722a9Sopenharmony_ci
7433d722a9Sopenharmony_ci    impl UniquePtr<D> {}
7533d722a9Sopenharmony_ci    impl UniquePtr<E> {}
7633d722a9Sopenharmony_ci    impl UniquePtr<F> {}
7733d722a9Sopenharmony_ci    impl UniquePtr<G> {}
7833d722a9Sopenharmony_ci}
79