133d722a9Sopenharmony_ci#![allow( 233d722a9Sopenharmony_ci clippy::boxed_local, 333d722a9Sopenharmony_ci clippy::derive_partial_eq_without_eq, 433d722a9Sopenharmony_ci clippy::just_underscores_and_digits, 533d722a9Sopenharmony_ci clippy::missing_safety_doc, 633d722a9Sopenharmony_ci clippy::must_use_candidate, 733d722a9Sopenharmony_ci clippy::needless_lifetimes, 833d722a9Sopenharmony_ci clippy::needless_pass_by_value, 933d722a9Sopenharmony_ci clippy::ptr_arg, 1033d722a9Sopenharmony_ci clippy::trivially_copy_pass_by_ref, 1133d722a9Sopenharmony_ci clippy::unnecessary_wraps, 1233d722a9Sopenharmony_ci clippy::unused_self 1333d722a9Sopenharmony_ci)] 1433d722a9Sopenharmony_ci 1533d722a9Sopenharmony_cipub mod cast; 1633d722a9Sopenharmony_cipub mod module; 1733d722a9Sopenharmony_ci 1833d722a9Sopenharmony_ciuse cxx::{type_id, CxxString, CxxVector, ExternType, SharedPtr, UniquePtr}; 1933d722a9Sopenharmony_ciuse std::fmt::{self, Display}; 2033d722a9Sopenharmony_ciuse std::mem::MaybeUninit; 2133d722a9Sopenharmony_ciuse std::os::raw::c_char; 2233d722a9Sopenharmony_ci 2333d722a9Sopenharmony_ci#[cxx::bridge(namespace = "tests")] 2433d722a9Sopenharmony_cipub mod ffi { 2533d722a9Sopenharmony_ci #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] 2633d722a9Sopenharmony_ci struct Shared { 2733d722a9Sopenharmony_ci z: usize, 2833d722a9Sopenharmony_ci } 2933d722a9Sopenharmony_ci 3033d722a9Sopenharmony_ci #[derive(PartialEq, PartialOrd)] 3133d722a9Sopenharmony_ci struct SharedString { 3233d722a9Sopenharmony_ci msg: String, 3333d722a9Sopenharmony_ci } 3433d722a9Sopenharmony_ci 3533d722a9Sopenharmony_ci #[derive(Debug, Hash, PartialOrd, Ord)] 3633d722a9Sopenharmony_ci enum Enum { 3733d722a9Sopenharmony_ci AVal, 3833d722a9Sopenharmony_ci BVal = 2020, 3933d722a9Sopenharmony_ci #[cxx_name = "CVal"] 4033d722a9Sopenharmony_ci LastVal, 4133d722a9Sopenharmony_ci } 4233d722a9Sopenharmony_ci 4333d722a9Sopenharmony_ci #[namespace = "A"] 4433d722a9Sopenharmony_ci #[derive(Copy, Clone, Default)] 4533d722a9Sopenharmony_ci struct AShared { 4633d722a9Sopenharmony_ci #[cxx_name = "type"] 4733d722a9Sopenharmony_ci z: usize, 4833d722a9Sopenharmony_ci } 4933d722a9Sopenharmony_ci 5033d722a9Sopenharmony_ci #[namespace = "A"] 5133d722a9Sopenharmony_ci enum AEnum { 5233d722a9Sopenharmony_ci AAVal, 5333d722a9Sopenharmony_ci ABVal = 2020, 5433d722a9Sopenharmony_ci ACVal, 5533d722a9Sopenharmony_ci } 5633d722a9Sopenharmony_ci 5733d722a9Sopenharmony_ci #[namespace = "A::B"] 5833d722a9Sopenharmony_ci enum ABEnum { 5933d722a9Sopenharmony_ci ABAVal, 6033d722a9Sopenharmony_ci ABBVal = 2020, 6133d722a9Sopenharmony_ci ABCVal, 6233d722a9Sopenharmony_ci } 6333d722a9Sopenharmony_ci 6433d722a9Sopenharmony_ci #[namespace = "A::B"] 6533d722a9Sopenharmony_ci #[derive(Clone)] 6633d722a9Sopenharmony_ci struct ABShared { 6733d722a9Sopenharmony_ci z: usize, 6833d722a9Sopenharmony_ci } 6933d722a9Sopenharmony_ci 7033d722a9Sopenharmony_ci #[namespace = "first"] 7133d722a9Sopenharmony_ci struct First { 7233d722a9Sopenharmony_ci second: Box<Second>, 7333d722a9Sopenharmony_ci } 7433d722a9Sopenharmony_ci 7533d722a9Sopenharmony_ci #[namespace = "second"] 7633d722a9Sopenharmony_ci #[derive(Hash)] 7733d722a9Sopenharmony_ci struct Second { 7833d722a9Sopenharmony_ci i: i32, 7933d722a9Sopenharmony_ci e: COwnedEnum, 8033d722a9Sopenharmony_ci } 8133d722a9Sopenharmony_ci 8233d722a9Sopenharmony_ci pub struct Array { 8333d722a9Sopenharmony_ci a: [i32; 4], 8433d722a9Sopenharmony_ci b: Buffer, 8533d722a9Sopenharmony_ci } 8633d722a9Sopenharmony_ci 8733d722a9Sopenharmony_ci #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] 8833d722a9Sopenharmony_ci pub struct StructWithLifetime<'a> { 8933d722a9Sopenharmony_ci s: &'a str, 9033d722a9Sopenharmony_ci } 9133d722a9Sopenharmony_ci 9233d722a9Sopenharmony_ci unsafe extern "C++" { 9333d722a9Sopenharmony_ci include!("tests/ffi/tests.h"); 9433d722a9Sopenharmony_ci 9533d722a9Sopenharmony_ci type C; 9633d722a9Sopenharmony_ci 9733d722a9Sopenharmony_ci fn c_return_primitive() -> usize; 9833d722a9Sopenharmony_ci fn c_return_shared() -> Shared; 9933d722a9Sopenharmony_ci fn c_return_box() -> Box<R>; 10033d722a9Sopenharmony_ci fn c_return_unique_ptr() -> UniquePtr<C>; 10133d722a9Sopenharmony_ci fn c_return_shared_ptr() -> SharedPtr<C>; 10233d722a9Sopenharmony_ci fn c_return_ref(shared: &Shared) -> &usize; 10333d722a9Sopenharmony_ci fn c_return_mut(shared: &mut Shared) -> &mut usize; 10433d722a9Sopenharmony_ci fn c_return_str(shared: &Shared) -> &str; 10533d722a9Sopenharmony_ci fn c_return_slice_char(shared: &Shared) -> &[c_char]; 10633d722a9Sopenharmony_ci fn c_return_mutsliceu8(slice: &mut [u8]) -> &mut [u8]; 10733d722a9Sopenharmony_ci fn c_return_rust_string() -> String; 10833d722a9Sopenharmony_ci fn c_return_rust_string_lossy() -> String; 10933d722a9Sopenharmony_ci fn c_return_unique_ptr_string() -> UniquePtr<CxxString>; 11033d722a9Sopenharmony_ci fn c_return_unique_ptr_vector_u8() -> UniquePtr<CxxVector<u8>>; 11133d722a9Sopenharmony_ci fn c_return_unique_ptr_vector_f64() -> UniquePtr<CxxVector<f64>>; 11233d722a9Sopenharmony_ci fn c_return_unique_ptr_vector_string() -> UniquePtr<CxxVector<CxxString>>; 11333d722a9Sopenharmony_ci fn c_return_unique_ptr_vector_shared() -> UniquePtr<CxxVector<Shared>>; 11433d722a9Sopenharmony_ci fn c_return_unique_ptr_vector_opaque() -> UniquePtr<CxxVector<C>>; 11533d722a9Sopenharmony_ci fn c_return_ref_vector(c: &C) -> &CxxVector<u8>; 11633d722a9Sopenharmony_ci fn c_return_mut_vector(c: Pin<&mut C>) -> Pin<&mut CxxVector<u8>>; 11733d722a9Sopenharmony_ci fn c_return_rust_vec_u8() -> Vec<u8>; 11833d722a9Sopenharmony_ci fn c_return_ref_rust_vec(c: &C) -> &Vec<u8>; 11933d722a9Sopenharmony_ci fn c_return_mut_rust_vec(c: Pin<&mut C>) -> &mut Vec<u8>; 12033d722a9Sopenharmony_ci fn c_return_rust_vec_string() -> Vec<String>; 12133d722a9Sopenharmony_ci fn c_return_rust_vec_bool() -> Vec<bool>; 12233d722a9Sopenharmony_ci fn c_return_identity(_: usize) -> usize; 12333d722a9Sopenharmony_ci fn c_return_sum(_: usize, _: usize) -> usize; 12433d722a9Sopenharmony_ci fn c_return_enum(n: u16) -> Enum; 12533d722a9Sopenharmony_ci fn c_return_ns_ref(shared: &AShared) -> &usize; 12633d722a9Sopenharmony_ci fn c_return_nested_ns_ref(shared: &ABShared) -> &usize; 12733d722a9Sopenharmony_ci fn c_return_ns_enum(n: u16) -> AEnum; 12833d722a9Sopenharmony_ci fn c_return_nested_ns_enum(n: u16) -> ABEnum; 12933d722a9Sopenharmony_ci fn c_return_const_ptr(n: usize) -> *const C; 13033d722a9Sopenharmony_ci fn c_return_mut_ptr(n: usize) -> *mut C; 13133d722a9Sopenharmony_ci 13233d722a9Sopenharmony_ci fn c_take_primitive(n: usize); 13333d722a9Sopenharmony_ci fn c_take_shared(shared: Shared); 13433d722a9Sopenharmony_ci fn c_take_box(r: Box<R>); 13533d722a9Sopenharmony_ci fn c_take_ref_r(r: &R); 13633d722a9Sopenharmony_ci fn c_take_ref_c(c: &C); 13733d722a9Sopenharmony_ci fn c_take_str(s: &str); 13833d722a9Sopenharmony_ci fn c_take_slice_char(s: &[c_char]); 13933d722a9Sopenharmony_ci fn c_take_slice_shared(s: &[Shared]); 14033d722a9Sopenharmony_ci fn c_take_slice_shared_sort(s: &mut [Shared]); 14133d722a9Sopenharmony_ci fn c_take_slice_r(s: &[R]); 14233d722a9Sopenharmony_ci fn c_take_slice_r_sort(s: &mut [R]); 14333d722a9Sopenharmony_ci fn c_take_rust_string(s: String); 14433d722a9Sopenharmony_ci fn c_take_unique_ptr_string(s: UniquePtr<CxxString>); 14533d722a9Sopenharmony_ci fn c_take_unique_ptr_vector_u8(v: UniquePtr<CxxVector<u8>>); 14633d722a9Sopenharmony_ci fn c_take_unique_ptr_vector_f64(v: UniquePtr<CxxVector<f64>>); 14733d722a9Sopenharmony_ci fn c_take_unique_ptr_vector_string(v: UniquePtr<CxxVector<CxxString>>); 14833d722a9Sopenharmony_ci fn c_take_unique_ptr_vector_shared(v: UniquePtr<CxxVector<Shared>>); 14933d722a9Sopenharmony_ci fn c_take_ref_vector(v: &CxxVector<u8>); 15033d722a9Sopenharmony_ci fn c_take_rust_vec(v: Vec<u8>); 15133d722a9Sopenharmony_ci fn c_take_rust_vec_shared(v: Vec<Shared>); 15233d722a9Sopenharmony_ci fn c_take_rust_vec_string(v: Vec<String>); 15333d722a9Sopenharmony_ci fn c_take_rust_vec_index(v: Vec<u8>); 15433d722a9Sopenharmony_ci fn c_take_rust_vec_shared_index(v: Vec<Shared>); 15533d722a9Sopenharmony_ci fn c_take_rust_vec_shared_push(v: Vec<Shared>); 15633d722a9Sopenharmony_ci fn c_take_rust_vec_shared_truncate(v: Vec<Shared>); 15733d722a9Sopenharmony_ci fn c_take_rust_vec_shared_clear(v: Vec<Shared>); 15833d722a9Sopenharmony_ci fn c_take_rust_vec_shared_forward_iterator(v: Vec<Shared>); 15933d722a9Sopenharmony_ci fn c_take_rust_vec_shared_sort(v: Vec<Shared>); 16033d722a9Sopenharmony_ci fn c_take_ref_rust_vec(v: &Vec<u8>); 16133d722a9Sopenharmony_ci fn c_take_ref_rust_vec_string(v: &Vec<String>); 16233d722a9Sopenharmony_ci fn c_take_ref_rust_vec_index(v: &Vec<u8>); 16333d722a9Sopenharmony_ci fn c_take_ref_rust_vec_copy(v: &Vec<u8>); 16433d722a9Sopenharmony_ci fn c_take_ref_shared_string(s: &SharedString) -> &SharedString; 16533d722a9Sopenharmony_ci fn c_take_callback(callback: fn(String) -> usize); 16633d722a9Sopenharmony_ci fn c_take_callback_ref(callback: fn(&String)); 16733d722a9Sopenharmony_ci #[cxx_name = "c_take_callback_ref"] 16833d722a9Sopenharmony_ci fn c_take_callback_ref_lifetime<'a>(callback: fn(&'a String)); 16933d722a9Sopenharmony_ci fn c_take_callback_mut(callback: fn(&mut String)); 17033d722a9Sopenharmony_ci fn c_take_enum(e: Enum); 17133d722a9Sopenharmony_ci fn c_take_ns_enum(e: AEnum); 17233d722a9Sopenharmony_ci fn c_take_nested_ns_enum(e: ABEnum); 17333d722a9Sopenharmony_ci fn c_take_ns_shared(shared: AShared); 17433d722a9Sopenharmony_ci fn c_take_nested_ns_shared(shared: ABShared); 17533d722a9Sopenharmony_ci fn c_take_rust_vec_ns_shared(v: Vec<AShared>); 17633d722a9Sopenharmony_ci fn c_take_rust_vec_nested_ns_shared(v: Vec<ABShared>); 17733d722a9Sopenharmony_ci unsafe fn c_take_const_ptr(c: *const C) -> usize; 17833d722a9Sopenharmony_ci unsafe fn c_take_mut_ptr(c: *mut C) -> usize; 17933d722a9Sopenharmony_ci 18033d722a9Sopenharmony_ci fn c_try_return_void() -> Result<()>; 18133d722a9Sopenharmony_ci fn c_try_return_primitive() -> Result<usize>; 18233d722a9Sopenharmony_ci fn c_fail_return_primitive() -> Result<usize>; 18333d722a9Sopenharmony_ci fn c_try_return_box() -> Result<Box<R>>; 18433d722a9Sopenharmony_ci fn c_try_return_ref(s: &String) -> Result<&String>; 18533d722a9Sopenharmony_ci fn c_try_return_str(s: &str) -> Result<&str>; 18633d722a9Sopenharmony_ci fn c_try_return_sliceu8(s: &[u8]) -> Result<&[u8]>; 18733d722a9Sopenharmony_ci fn c_try_return_mutsliceu8(s: &mut [u8]) -> Result<&mut [u8]>; 18833d722a9Sopenharmony_ci fn c_try_return_rust_string() -> Result<String>; 18933d722a9Sopenharmony_ci fn c_try_return_unique_ptr_string() -> Result<UniquePtr<CxxString>>; 19033d722a9Sopenharmony_ci fn c_try_return_rust_vec() -> Result<Vec<u8>>; 19133d722a9Sopenharmony_ci fn c_try_return_rust_vec_string() -> Result<Vec<String>>; 19233d722a9Sopenharmony_ci fn c_try_return_ref_rust_vec(c: &C) -> Result<&Vec<u8>>; 19333d722a9Sopenharmony_ci 19433d722a9Sopenharmony_ci fn get(self: &C) -> usize; 19533d722a9Sopenharmony_ci fn set(self: Pin<&mut C>, n: usize) -> usize; 19633d722a9Sopenharmony_ci fn get2(&self) -> usize; 19733d722a9Sopenharmony_ci fn getRef(self: &C) -> &usize; 19833d722a9Sopenharmony_ci fn getMut(self: Pin<&mut C>) -> &mut usize; 19933d722a9Sopenharmony_ci fn set_succeed(self: Pin<&mut C>, n: usize) -> Result<usize>; 20033d722a9Sopenharmony_ci fn get_fail(self: Pin<&mut C>) -> Result<usize>; 20133d722a9Sopenharmony_ci fn c_method_on_shared(self: &Shared) -> usize; 20233d722a9Sopenharmony_ci fn c_method_ref_on_shared(self: &Shared) -> &usize; 20333d722a9Sopenharmony_ci fn c_method_mut_on_shared(self: &mut Shared) -> &mut usize; 20433d722a9Sopenharmony_ci fn c_set_array(self: &mut Array, value: i32); 20533d722a9Sopenharmony_ci 20633d722a9Sopenharmony_ci fn c_get_use_count(weak: &WeakPtr<C>) -> usize; 20733d722a9Sopenharmony_ci 20833d722a9Sopenharmony_ci #[rust_name = "i32_overloaded_method"] 20933d722a9Sopenharmony_ci fn cOverloadedMethod(&self, x: i32) -> String; 21033d722a9Sopenharmony_ci #[rust_name = "str_overloaded_method"] 21133d722a9Sopenharmony_ci fn cOverloadedMethod(&self, x: &str) -> String; 21233d722a9Sopenharmony_ci #[rust_name = "i32_overloaded_function"] 21333d722a9Sopenharmony_ci fn cOverloadedFunction(x: i32) -> String; 21433d722a9Sopenharmony_ci #[rust_name = "str_overloaded_function"] 21533d722a9Sopenharmony_ci fn cOverloadedFunction(x: &str) -> String; 21633d722a9Sopenharmony_ci 21733d722a9Sopenharmony_ci #[namespace = "other"] 21833d722a9Sopenharmony_ci fn ns_c_take_ns_shared(shared: AShared); 21933d722a9Sopenharmony_ci } 22033d722a9Sopenharmony_ci 22133d722a9Sopenharmony_ci extern "C++" { 22233d722a9Sopenharmony_ci include!("tests/ffi/module.rs.h"); 22333d722a9Sopenharmony_ci 22433d722a9Sopenharmony_ci type COwnedEnum; 22533d722a9Sopenharmony_ci type Job = crate::module::ffi::Job; 22633d722a9Sopenharmony_ci } 22733d722a9Sopenharmony_ci 22833d722a9Sopenharmony_ci extern "Rust" { 22933d722a9Sopenharmony_ci #[derive(ExternType)] 23033d722a9Sopenharmony_ci type Reference<'a>; 23133d722a9Sopenharmony_ci } 23233d722a9Sopenharmony_ci 23333d722a9Sopenharmony_ci unsafe extern "C++" { 23433d722a9Sopenharmony_ci type Borrow<'a>; 23533d722a9Sopenharmony_ci 23633d722a9Sopenharmony_ci fn c_return_borrow<'a>(s: &'a CxxString) -> UniquePtr<Borrow<'a>>; 23733d722a9Sopenharmony_ci 23833d722a9Sopenharmony_ci #[rust_name = "c_return_borrow_elided"] 23933d722a9Sopenharmony_ci fn c_return_borrow(s: &CxxString) -> UniquePtr<Borrow>; 24033d722a9Sopenharmony_ci 24133d722a9Sopenharmony_ci fn const_member(self: &Borrow); 24233d722a9Sopenharmony_ci fn nonconst_member(self: Pin<&mut Borrow>); 24333d722a9Sopenharmony_ci } 24433d722a9Sopenharmony_ci 24533d722a9Sopenharmony_ci #[repr(u32)] 24633d722a9Sopenharmony_ci #[derive(Hash)] 24733d722a9Sopenharmony_ci enum COwnedEnum { 24833d722a9Sopenharmony_ci #[cxx_name = "CVAL1"] 24933d722a9Sopenharmony_ci CVal1, 25033d722a9Sopenharmony_ci #[cxx_name = "CVAL2"] 25133d722a9Sopenharmony_ci CVal2, 25233d722a9Sopenharmony_ci } 25333d722a9Sopenharmony_ci 25433d722a9Sopenharmony_ci extern "C++" { 25533d722a9Sopenharmony_ci type Buffer = crate::Buffer; 25633d722a9Sopenharmony_ci } 25733d722a9Sopenharmony_ci 25833d722a9Sopenharmony_ci extern "Rust" { 25933d722a9Sopenharmony_ci type R; 26033d722a9Sopenharmony_ci 26133d722a9Sopenharmony_ci fn r_return_primitive() -> usize; 26233d722a9Sopenharmony_ci fn r_return_shared() -> Shared; 26333d722a9Sopenharmony_ci fn r_return_box() -> Box<R>; 26433d722a9Sopenharmony_ci fn r_return_unique_ptr() -> UniquePtr<C>; 26533d722a9Sopenharmony_ci fn r_return_shared_ptr() -> SharedPtr<C>; 26633d722a9Sopenharmony_ci fn r_return_ref(shared: &Shared) -> &usize; 26733d722a9Sopenharmony_ci fn r_return_mut(shared: &mut Shared) -> &mut usize; 26833d722a9Sopenharmony_ci fn r_return_str(shared: &Shared) -> &str; 26933d722a9Sopenharmony_ci fn r_return_sliceu8(shared: &Shared) -> &[u8]; 27033d722a9Sopenharmony_ci fn r_return_mutsliceu8(slice: &mut [u8]) -> &mut [u8]; 27133d722a9Sopenharmony_ci fn r_return_rust_string() -> String; 27233d722a9Sopenharmony_ci fn r_return_unique_ptr_string() -> UniquePtr<CxxString>; 27333d722a9Sopenharmony_ci fn r_return_rust_vec() -> Vec<u8>; 27433d722a9Sopenharmony_ci fn r_return_rust_vec_string() -> Vec<String>; 27533d722a9Sopenharmony_ci fn r_return_rust_vec_extern_struct() -> Vec<Job>; 27633d722a9Sopenharmony_ci fn r_return_ref_rust_vec(shared: &Shared) -> &Vec<u8>; 27733d722a9Sopenharmony_ci fn r_return_mut_rust_vec(shared: &mut Shared) -> &mut Vec<u8>; 27833d722a9Sopenharmony_ci fn r_return_identity(_: usize) -> usize; 27933d722a9Sopenharmony_ci fn r_return_sum(_: usize, _: usize) -> usize; 28033d722a9Sopenharmony_ci fn r_return_enum(n: u32) -> Enum; 28133d722a9Sopenharmony_ci 28233d722a9Sopenharmony_ci fn r_take_primitive(n: usize); 28333d722a9Sopenharmony_ci fn r_take_shared(shared: Shared); 28433d722a9Sopenharmony_ci fn r_take_box(r: Box<R>); 28533d722a9Sopenharmony_ci fn r_take_unique_ptr(c: UniquePtr<C>); 28633d722a9Sopenharmony_ci fn r_take_shared_ptr(c: SharedPtr<C>); 28733d722a9Sopenharmony_ci fn r_take_ref_r(r: &R); 28833d722a9Sopenharmony_ci fn r_take_ref_c(c: &C); 28933d722a9Sopenharmony_ci fn r_take_str(s: &str); 29033d722a9Sopenharmony_ci fn r_take_slice_char(s: &[c_char]); 29133d722a9Sopenharmony_ci fn r_take_rust_string(s: String); 29233d722a9Sopenharmony_ci fn r_take_unique_ptr_string(s: UniquePtr<CxxString>); 29333d722a9Sopenharmony_ci fn r_take_ref_vector(v: &CxxVector<u8>); 29433d722a9Sopenharmony_ci fn r_take_ref_empty_vector(v: &CxxVector<u64>); 29533d722a9Sopenharmony_ci fn r_take_rust_vec(v: Vec<u8>); 29633d722a9Sopenharmony_ci fn r_take_rust_vec_string(v: Vec<String>); 29733d722a9Sopenharmony_ci fn r_take_ref_rust_vec(v: &Vec<u8>); 29833d722a9Sopenharmony_ci fn r_take_ref_rust_vec_string(v: &Vec<String>); 29933d722a9Sopenharmony_ci fn r_take_enum(e: Enum); 30033d722a9Sopenharmony_ci 30133d722a9Sopenharmony_ci fn r_try_return_void() -> Result<()>; 30233d722a9Sopenharmony_ci fn r_try_return_primitive() -> Result<usize>; 30333d722a9Sopenharmony_ci fn r_try_return_box() -> Result<Box<R>>; 30433d722a9Sopenharmony_ci fn r_fail_return_primitive() -> Result<usize>; 30533d722a9Sopenharmony_ci fn r_try_return_sliceu8(s: &[u8]) -> Result<&[u8]>; 30633d722a9Sopenharmony_ci fn r_try_return_mutsliceu8(s: &mut [u8]) -> Result<&mut [u8]>; 30733d722a9Sopenharmony_ci 30833d722a9Sopenharmony_ci fn get(self: &R) -> usize; 30933d722a9Sopenharmony_ci fn set(self: &mut R, n: usize) -> usize; 31033d722a9Sopenharmony_ci fn r_method_on_shared(self: &Shared) -> String; 31133d722a9Sopenharmony_ci fn r_get_array_sum(self: &Array) -> i32; 31233d722a9Sopenharmony_ci 31333d722a9Sopenharmony_ci #[cxx_name = "rAliasedFunction"] 31433d722a9Sopenharmony_ci fn r_aliased_function(x: i32) -> String; 31533d722a9Sopenharmony_ci } 31633d722a9Sopenharmony_ci 31733d722a9Sopenharmony_ci struct Dag0 { 31833d722a9Sopenharmony_ci i: i32, 31933d722a9Sopenharmony_ci } 32033d722a9Sopenharmony_ci 32133d722a9Sopenharmony_ci struct Dag1 { 32233d722a9Sopenharmony_ci dag2: Dag2, 32333d722a9Sopenharmony_ci vec: Vec<Dag3>, 32433d722a9Sopenharmony_ci } 32533d722a9Sopenharmony_ci 32633d722a9Sopenharmony_ci struct Dag2 { 32733d722a9Sopenharmony_ci dag4: Dag4, 32833d722a9Sopenharmony_ci } 32933d722a9Sopenharmony_ci 33033d722a9Sopenharmony_ci struct Dag3 { 33133d722a9Sopenharmony_ci dag1: Dag1, 33233d722a9Sopenharmony_ci } 33333d722a9Sopenharmony_ci 33433d722a9Sopenharmony_ci struct Dag4 { 33533d722a9Sopenharmony_ci dag0: Dag0, 33633d722a9Sopenharmony_ci } 33733d722a9Sopenharmony_ci 33833d722a9Sopenharmony_ci impl Box<Shared> {} 33933d722a9Sopenharmony_ci impl CxxVector<SharedString> {} 34033d722a9Sopenharmony_ci} 34133d722a9Sopenharmony_ci 34233d722a9Sopenharmony_cimod other { 34333d722a9Sopenharmony_ci use cxx::kind::{Opaque, Trivial}; 34433d722a9Sopenharmony_ci use cxx::{type_id, CxxString, ExternType}; 34533d722a9Sopenharmony_ci 34633d722a9Sopenharmony_ci #[repr(C)] 34733d722a9Sopenharmony_ci pub struct D { 34833d722a9Sopenharmony_ci pub d: u64, 34933d722a9Sopenharmony_ci } 35033d722a9Sopenharmony_ci 35133d722a9Sopenharmony_ci #[repr(C)] 35233d722a9Sopenharmony_ci pub struct E { 35333d722a9Sopenharmony_ci e: u64, 35433d722a9Sopenharmony_ci e_str: CxxString, 35533d722a9Sopenharmony_ci } 35633d722a9Sopenharmony_ci 35733d722a9Sopenharmony_ci pub mod f { 35833d722a9Sopenharmony_ci use cxx::kind::Opaque; 35933d722a9Sopenharmony_ci use cxx::{type_id, CxxString, ExternType}; 36033d722a9Sopenharmony_ci 36133d722a9Sopenharmony_ci #[repr(C)] 36233d722a9Sopenharmony_ci pub struct F { 36333d722a9Sopenharmony_ci e: u64, 36433d722a9Sopenharmony_ci e_str: CxxString, 36533d722a9Sopenharmony_ci } 36633d722a9Sopenharmony_ci 36733d722a9Sopenharmony_ci unsafe impl ExternType for F { 36833d722a9Sopenharmony_ci type Id = type_id!("F::F"); 36933d722a9Sopenharmony_ci type Kind = Opaque; 37033d722a9Sopenharmony_ci } 37133d722a9Sopenharmony_ci } 37233d722a9Sopenharmony_ci 37333d722a9Sopenharmony_ci #[repr(C)] 37433d722a9Sopenharmony_ci pub struct G { 37533d722a9Sopenharmony_ci pub g: u64, 37633d722a9Sopenharmony_ci } 37733d722a9Sopenharmony_ci 37833d722a9Sopenharmony_ci unsafe impl ExternType for G { 37933d722a9Sopenharmony_ci type Id = type_id!("G::G"); 38033d722a9Sopenharmony_ci type Kind = Trivial; 38133d722a9Sopenharmony_ci } 38233d722a9Sopenharmony_ci 38333d722a9Sopenharmony_ci unsafe impl ExternType for D { 38433d722a9Sopenharmony_ci type Id = type_id!("tests::D"); 38533d722a9Sopenharmony_ci type Kind = Trivial; 38633d722a9Sopenharmony_ci } 38733d722a9Sopenharmony_ci 38833d722a9Sopenharmony_ci unsafe impl ExternType for E { 38933d722a9Sopenharmony_ci type Id = type_id!("tests::E"); 39033d722a9Sopenharmony_ci type Kind = Opaque; 39133d722a9Sopenharmony_ci } 39233d722a9Sopenharmony_ci} 39333d722a9Sopenharmony_ci 39433d722a9Sopenharmony_ci#[derive(PartialEq, Debug)] 39533d722a9Sopenharmony_cipub struct R(pub usize); 39633d722a9Sopenharmony_ci 39733d722a9Sopenharmony_ciimpl R { 39833d722a9Sopenharmony_ci fn get(&self) -> usize { 39933d722a9Sopenharmony_ci self.0 40033d722a9Sopenharmony_ci } 40133d722a9Sopenharmony_ci 40233d722a9Sopenharmony_ci fn set(&mut self, n: usize) -> usize { 40333d722a9Sopenharmony_ci self.0 = n; 40433d722a9Sopenharmony_ci n 40533d722a9Sopenharmony_ci } 40633d722a9Sopenharmony_ci} 40733d722a9Sopenharmony_ci 40833d722a9Sopenharmony_cipub struct Reference<'a>(&'a String); 40933d722a9Sopenharmony_ci 41033d722a9Sopenharmony_ciimpl ffi::Shared { 41133d722a9Sopenharmony_ci fn r_method_on_shared(&self) -> String { 41233d722a9Sopenharmony_ci "2020".to_owned() 41333d722a9Sopenharmony_ci } 41433d722a9Sopenharmony_ci} 41533d722a9Sopenharmony_ci 41633d722a9Sopenharmony_ciimpl ffi::Array { 41733d722a9Sopenharmony_ci pub fn r_get_array_sum(&self) -> i32 { 41833d722a9Sopenharmony_ci self.a.iter().sum() 41933d722a9Sopenharmony_ci } 42033d722a9Sopenharmony_ci} 42133d722a9Sopenharmony_ci 42233d722a9Sopenharmony_ci#[derive(Default)] 42333d722a9Sopenharmony_ci#[repr(C)] 42433d722a9Sopenharmony_cipub struct Buffer([c_char; 12]); 42533d722a9Sopenharmony_ci 42633d722a9Sopenharmony_ciunsafe impl ExternType for Buffer { 42733d722a9Sopenharmony_ci type Id = type_id!("tests::Buffer"); 42833d722a9Sopenharmony_ci type Kind = cxx::kind::Trivial; 42933d722a9Sopenharmony_ci} 43033d722a9Sopenharmony_ci 43133d722a9Sopenharmony_ci#[derive(Debug)] 43233d722a9Sopenharmony_cistruct Error; 43333d722a9Sopenharmony_ci 43433d722a9Sopenharmony_ciimpl std::error::Error for Error {} 43533d722a9Sopenharmony_ci 43633d722a9Sopenharmony_ciimpl Display for Error { 43733d722a9Sopenharmony_ci fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 43833d722a9Sopenharmony_ci f.write_str("rust error") 43933d722a9Sopenharmony_ci } 44033d722a9Sopenharmony_ci} 44133d722a9Sopenharmony_ci 44233d722a9Sopenharmony_cifn r_return_primitive() -> usize { 44333d722a9Sopenharmony_ci 2020 44433d722a9Sopenharmony_ci} 44533d722a9Sopenharmony_ci 44633d722a9Sopenharmony_cifn r_return_shared() -> ffi::Shared { 44733d722a9Sopenharmony_ci ffi::Shared { z: 2020 } 44833d722a9Sopenharmony_ci} 44933d722a9Sopenharmony_ci 45033d722a9Sopenharmony_cifn r_return_box() -> Box<R> { 45133d722a9Sopenharmony_ci Box::new(R(2020)) 45233d722a9Sopenharmony_ci} 45333d722a9Sopenharmony_ci 45433d722a9Sopenharmony_cifn r_return_unique_ptr() -> UniquePtr<ffi::C> { 45533d722a9Sopenharmony_ci extern "C" { 45633d722a9Sopenharmony_ci fn cxx_test_suite_get_unique_ptr() -> *mut ffi::C; 45733d722a9Sopenharmony_ci } 45833d722a9Sopenharmony_ci unsafe { UniquePtr::from_raw(cxx_test_suite_get_unique_ptr()) } 45933d722a9Sopenharmony_ci} 46033d722a9Sopenharmony_ci 46133d722a9Sopenharmony_cifn r_return_shared_ptr() -> SharedPtr<ffi::C> { 46233d722a9Sopenharmony_ci extern "C" { 46333d722a9Sopenharmony_ci fn cxx_test_suite_get_shared_ptr(repr: *mut SharedPtr<ffi::C>); 46433d722a9Sopenharmony_ci } 46533d722a9Sopenharmony_ci let mut shared_ptr = MaybeUninit::<SharedPtr<ffi::C>>::uninit(); 46633d722a9Sopenharmony_ci let repr = shared_ptr.as_mut_ptr(); 46733d722a9Sopenharmony_ci unsafe { 46833d722a9Sopenharmony_ci cxx_test_suite_get_shared_ptr(repr); 46933d722a9Sopenharmony_ci shared_ptr.assume_init() 47033d722a9Sopenharmony_ci } 47133d722a9Sopenharmony_ci} 47233d722a9Sopenharmony_ci 47333d722a9Sopenharmony_cifn r_return_ref(shared: &ffi::Shared) -> &usize { 47433d722a9Sopenharmony_ci &shared.z 47533d722a9Sopenharmony_ci} 47633d722a9Sopenharmony_ci 47733d722a9Sopenharmony_cifn r_return_mut(shared: &mut ffi::Shared) -> &mut usize { 47833d722a9Sopenharmony_ci &mut shared.z 47933d722a9Sopenharmony_ci} 48033d722a9Sopenharmony_ci 48133d722a9Sopenharmony_cifn r_return_str(shared: &ffi::Shared) -> &str { 48233d722a9Sopenharmony_ci let _ = shared; 48333d722a9Sopenharmony_ci "2020" 48433d722a9Sopenharmony_ci} 48533d722a9Sopenharmony_ci 48633d722a9Sopenharmony_cifn r_return_sliceu8(shared: &ffi::Shared) -> &[u8] { 48733d722a9Sopenharmony_ci let _ = shared; 48833d722a9Sopenharmony_ci b"2020" 48933d722a9Sopenharmony_ci} 49033d722a9Sopenharmony_ci 49133d722a9Sopenharmony_cifn r_return_mutsliceu8(slice: &mut [u8]) -> &mut [u8] { 49233d722a9Sopenharmony_ci slice 49333d722a9Sopenharmony_ci} 49433d722a9Sopenharmony_ci 49533d722a9Sopenharmony_cifn r_return_rust_string() -> String { 49633d722a9Sopenharmony_ci "2020".to_owned() 49733d722a9Sopenharmony_ci} 49833d722a9Sopenharmony_ci 49933d722a9Sopenharmony_cifn r_return_unique_ptr_string() -> UniquePtr<CxxString> { 50033d722a9Sopenharmony_ci extern "C" { 50133d722a9Sopenharmony_ci fn cxx_test_suite_get_unique_ptr_string() -> *mut CxxString; 50233d722a9Sopenharmony_ci } 50333d722a9Sopenharmony_ci unsafe { UniquePtr::from_raw(cxx_test_suite_get_unique_ptr_string()) } 50433d722a9Sopenharmony_ci} 50533d722a9Sopenharmony_ci 50633d722a9Sopenharmony_cifn r_return_rust_vec() -> Vec<u8> { 50733d722a9Sopenharmony_ci Vec::new() 50833d722a9Sopenharmony_ci} 50933d722a9Sopenharmony_ci 51033d722a9Sopenharmony_cifn r_return_rust_vec_string() -> Vec<String> { 51133d722a9Sopenharmony_ci Vec::new() 51233d722a9Sopenharmony_ci} 51333d722a9Sopenharmony_ci 51433d722a9Sopenharmony_cifn r_return_rust_vec_extern_struct() -> Vec<ffi::Job> { 51533d722a9Sopenharmony_ci Vec::new() 51633d722a9Sopenharmony_ci} 51733d722a9Sopenharmony_ci 51833d722a9Sopenharmony_cifn r_return_ref_rust_vec(shared: &ffi::Shared) -> &Vec<u8> { 51933d722a9Sopenharmony_ci let _ = shared; 52033d722a9Sopenharmony_ci unimplemented!() 52133d722a9Sopenharmony_ci} 52233d722a9Sopenharmony_ci 52333d722a9Sopenharmony_cifn r_return_mut_rust_vec(shared: &mut ffi::Shared) -> &mut Vec<u8> { 52433d722a9Sopenharmony_ci let _ = shared; 52533d722a9Sopenharmony_ci unimplemented!() 52633d722a9Sopenharmony_ci} 52733d722a9Sopenharmony_ci 52833d722a9Sopenharmony_cifn r_return_identity(n: usize) -> usize { 52933d722a9Sopenharmony_ci n 53033d722a9Sopenharmony_ci} 53133d722a9Sopenharmony_ci 53233d722a9Sopenharmony_cifn r_return_sum(n1: usize, n2: usize) -> usize { 53333d722a9Sopenharmony_ci n1 + n2 53433d722a9Sopenharmony_ci} 53533d722a9Sopenharmony_ci 53633d722a9Sopenharmony_cifn r_return_enum(n: u32) -> ffi::Enum { 53733d722a9Sopenharmony_ci if n == 0 { 53833d722a9Sopenharmony_ci ffi::Enum::AVal 53933d722a9Sopenharmony_ci } else if n <= 2020 { 54033d722a9Sopenharmony_ci ffi::Enum::BVal 54133d722a9Sopenharmony_ci } else { 54233d722a9Sopenharmony_ci ffi::Enum::LastVal 54333d722a9Sopenharmony_ci } 54433d722a9Sopenharmony_ci} 54533d722a9Sopenharmony_ci 54633d722a9Sopenharmony_cifn r_take_primitive(n: usize) { 54733d722a9Sopenharmony_ci assert_eq!(n, 2020); 54833d722a9Sopenharmony_ci} 54933d722a9Sopenharmony_ci 55033d722a9Sopenharmony_cifn r_take_shared(shared: ffi::Shared) { 55133d722a9Sopenharmony_ci assert_eq!(shared.z, 2020); 55233d722a9Sopenharmony_ci} 55333d722a9Sopenharmony_ci 55433d722a9Sopenharmony_cifn r_take_box(r: Box<R>) { 55533d722a9Sopenharmony_ci let _ = r; 55633d722a9Sopenharmony_ci} 55733d722a9Sopenharmony_ci 55833d722a9Sopenharmony_cifn r_take_unique_ptr(c: UniquePtr<ffi::C>) { 55933d722a9Sopenharmony_ci let _ = c; 56033d722a9Sopenharmony_ci} 56133d722a9Sopenharmony_ci 56233d722a9Sopenharmony_cifn r_take_shared_ptr(c: SharedPtr<ffi::C>) { 56333d722a9Sopenharmony_ci let _ = c; 56433d722a9Sopenharmony_ci} 56533d722a9Sopenharmony_ci 56633d722a9Sopenharmony_cifn r_take_ref_r(r: &R) { 56733d722a9Sopenharmony_ci let _ = r; 56833d722a9Sopenharmony_ci} 56933d722a9Sopenharmony_ci 57033d722a9Sopenharmony_cifn r_take_ref_c(c: &ffi::C) { 57133d722a9Sopenharmony_ci let _ = c; 57233d722a9Sopenharmony_ci} 57333d722a9Sopenharmony_ci 57433d722a9Sopenharmony_cifn r_take_str(s: &str) { 57533d722a9Sopenharmony_ci assert_eq!(s, "2020"); 57633d722a9Sopenharmony_ci} 57733d722a9Sopenharmony_ci 57833d722a9Sopenharmony_cifn r_take_rust_string(s: String) { 57933d722a9Sopenharmony_ci assert_eq!(s, "2020"); 58033d722a9Sopenharmony_ci} 58133d722a9Sopenharmony_ci 58233d722a9Sopenharmony_cifn r_take_slice_char(s: &[c_char]) { 58333d722a9Sopenharmony_ci assert_eq!(s.len(), 5); 58433d722a9Sopenharmony_ci let s = cast::c_char_to_unsigned(s); 58533d722a9Sopenharmony_ci assert_eq!(std::str::from_utf8(s).unwrap(), "2020\0"); 58633d722a9Sopenharmony_ci} 58733d722a9Sopenharmony_ci 58833d722a9Sopenharmony_cifn r_take_unique_ptr_string(s: UniquePtr<CxxString>) { 58933d722a9Sopenharmony_ci assert_eq!(s.as_ref().unwrap().to_str().unwrap(), "2020"); 59033d722a9Sopenharmony_ci} 59133d722a9Sopenharmony_ci 59233d722a9Sopenharmony_cifn r_take_ref_vector(v: &CxxVector<u8>) { 59333d722a9Sopenharmony_ci let slice = v.as_slice(); 59433d722a9Sopenharmony_ci assert_eq!(slice, [20, 2, 0]); 59533d722a9Sopenharmony_ci} 59633d722a9Sopenharmony_ci 59733d722a9Sopenharmony_cifn r_take_ref_empty_vector(v: &CxxVector<u64>) { 59833d722a9Sopenharmony_ci assert!(v.as_slice().is_empty()); 59933d722a9Sopenharmony_ci assert!(v.is_empty()); 60033d722a9Sopenharmony_ci} 60133d722a9Sopenharmony_ci 60233d722a9Sopenharmony_cifn r_take_rust_vec(v: Vec<u8>) { 60333d722a9Sopenharmony_ci let _ = v; 60433d722a9Sopenharmony_ci} 60533d722a9Sopenharmony_ci 60633d722a9Sopenharmony_cifn r_take_rust_vec_string(v: Vec<String>) { 60733d722a9Sopenharmony_ci let _ = v; 60833d722a9Sopenharmony_ci} 60933d722a9Sopenharmony_ci 61033d722a9Sopenharmony_cifn r_take_ref_rust_vec(v: &Vec<u8>) { 61133d722a9Sopenharmony_ci let _ = v; 61233d722a9Sopenharmony_ci} 61333d722a9Sopenharmony_ci 61433d722a9Sopenharmony_cifn r_take_ref_rust_vec_string(v: &Vec<String>) { 61533d722a9Sopenharmony_ci let _ = v; 61633d722a9Sopenharmony_ci} 61733d722a9Sopenharmony_ci 61833d722a9Sopenharmony_cifn r_take_enum(e: ffi::Enum) { 61933d722a9Sopenharmony_ci let _ = e; 62033d722a9Sopenharmony_ci} 62133d722a9Sopenharmony_ci 62233d722a9Sopenharmony_cifn r_try_return_void() -> Result<(), Error> { 62333d722a9Sopenharmony_ci Ok(()) 62433d722a9Sopenharmony_ci} 62533d722a9Sopenharmony_ci 62633d722a9Sopenharmony_cifn r_try_return_primitive() -> Result<usize, Error> { 62733d722a9Sopenharmony_ci Ok(2020) 62833d722a9Sopenharmony_ci} 62933d722a9Sopenharmony_ci 63033d722a9Sopenharmony_cifn r_try_return_box() -> Result<Box<R>, Error> { 63133d722a9Sopenharmony_ci Ok(Box::new(R(2020))) 63233d722a9Sopenharmony_ci} 63333d722a9Sopenharmony_ci 63433d722a9Sopenharmony_cifn r_fail_return_primitive() -> Result<usize, Error> { 63533d722a9Sopenharmony_ci Err(Error) 63633d722a9Sopenharmony_ci} 63733d722a9Sopenharmony_ci 63833d722a9Sopenharmony_cifn r_try_return_sliceu8(slice: &[u8]) -> Result<&[u8], Error> { 63933d722a9Sopenharmony_ci Ok(slice) 64033d722a9Sopenharmony_ci} 64133d722a9Sopenharmony_ci 64233d722a9Sopenharmony_cifn r_try_return_mutsliceu8(slice: &mut [u8]) -> Result<&mut [u8], Error> { 64333d722a9Sopenharmony_ci Ok(slice) 64433d722a9Sopenharmony_ci} 64533d722a9Sopenharmony_ci 64633d722a9Sopenharmony_cifn r_aliased_function(x: i32) -> String { 64733d722a9Sopenharmony_ci x.to_string() 64833d722a9Sopenharmony_ci} 649