133d722a9Sopenharmony_ci#pragma once 233d722a9Sopenharmony_ci#include "rust/cxx.h" 333d722a9Sopenharmony_ci#include <memory> 433d722a9Sopenharmony_ci#include <string> 533d722a9Sopenharmony_ci 633d722a9Sopenharmony_cinamespace A { 733d722a9Sopenharmony_cistruct AShared; 833d722a9Sopenharmony_cienum class AEnum : uint16_t; 933d722a9Sopenharmony_cinamespace B { 1033d722a9Sopenharmony_cistruct ABShared; 1133d722a9Sopenharmony_cienum class ABEnum : uint16_t; 1233d722a9Sopenharmony_ci} // namespace B 1333d722a9Sopenharmony_ci} // namespace A 1433d722a9Sopenharmony_ci 1533d722a9Sopenharmony_cinamespace F { 1633d722a9Sopenharmony_cistruct F { 1733d722a9Sopenharmony_ci uint64_t f; 1833d722a9Sopenharmony_ci std::string f_str; 1933d722a9Sopenharmony_ci}; 2033d722a9Sopenharmony_ci} // namespace F 2133d722a9Sopenharmony_ci 2233d722a9Sopenharmony_cinamespace G { 2333d722a9Sopenharmony_cistruct G { 2433d722a9Sopenharmony_ci uint64_t g; 2533d722a9Sopenharmony_ci}; 2633d722a9Sopenharmony_ci} // namespace G 2733d722a9Sopenharmony_ci 2833d722a9Sopenharmony_cinamespace H { 2933d722a9Sopenharmony_ciclass H { 3033d722a9Sopenharmony_cipublic: 3133d722a9Sopenharmony_ci std::string h; 3233d722a9Sopenharmony_ci}; 3333d722a9Sopenharmony_ci} // namespace H 3433d722a9Sopenharmony_ci 3533d722a9Sopenharmony_cinamespace tests { 3633d722a9Sopenharmony_ci 3733d722a9Sopenharmony_cistruct R; 3833d722a9Sopenharmony_cistruct Shared; 3933d722a9Sopenharmony_cistruct SharedString; 4033d722a9Sopenharmony_cienum class Enum : uint16_t; 4133d722a9Sopenharmony_ci 4233d722a9Sopenharmony_ciclass C { 4333d722a9Sopenharmony_cipublic: 4433d722a9Sopenharmony_ci C(size_t n); 4533d722a9Sopenharmony_ci size_t get() const; 4633d722a9Sopenharmony_ci size_t set(size_t n); 4733d722a9Sopenharmony_ci size_t get2() const; 4833d722a9Sopenharmony_ci const size_t &getRef() const; 4933d722a9Sopenharmony_ci size_t &getMut(); 5033d722a9Sopenharmony_ci size_t set_succeed(size_t n); 5133d722a9Sopenharmony_ci size_t get_fail(); 5233d722a9Sopenharmony_ci const std::vector<uint8_t> &get_v() const; 5333d722a9Sopenharmony_ci std::vector<uint8_t> &get_v(); 5433d722a9Sopenharmony_ci rust::String cOverloadedMethod(int32_t x) const; 5533d722a9Sopenharmony_ci rust::String cOverloadedMethod(rust::Str x) const; 5633d722a9Sopenharmony_ci 5733d722a9Sopenharmony_ciprivate: 5833d722a9Sopenharmony_ci size_t n; 5933d722a9Sopenharmony_ci std::vector<uint8_t> v; 6033d722a9Sopenharmony_ci}; 6133d722a9Sopenharmony_ci 6233d722a9Sopenharmony_cistruct D { 6333d722a9Sopenharmony_ci uint64_t d; 6433d722a9Sopenharmony_ci void c_take_trivial_ref_method() const; 6533d722a9Sopenharmony_ci void c_take_trivial_mut_ref_method(); 6633d722a9Sopenharmony_ci}; 6733d722a9Sopenharmony_ci 6833d722a9Sopenharmony_cistruct E { 6933d722a9Sopenharmony_ci uint64_t e; 7033d722a9Sopenharmony_ci std::string e_str; 7133d722a9Sopenharmony_ci void c_take_opaque_ref_method() const; 7233d722a9Sopenharmony_ci void c_take_opaque_mut_ref_method(); 7333d722a9Sopenharmony_ci}; 7433d722a9Sopenharmony_ci 7533d722a9Sopenharmony_cienum COwnedEnum { 7633d722a9Sopenharmony_ci CVAL1, 7733d722a9Sopenharmony_ci CVAL2, 7833d722a9Sopenharmony_ci}; 7933d722a9Sopenharmony_ci 8033d722a9Sopenharmony_cistruct Borrow { 8133d722a9Sopenharmony_ci Borrow(const std::string &s); 8233d722a9Sopenharmony_ci void const_member() const; 8333d722a9Sopenharmony_ci void nonconst_member(); 8433d722a9Sopenharmony_ci const std::string &s; 8533d722a9Sopenharmony_ci}; 8633d722a9Sopenharmony_ci 8733d722a9Sopenharmony_citypedef char Buffer[12]; 8833d722a9Sopenharmony_ci 8933d722a9Sopenharmony_cisize_t c_return_primitive(); 9033d722a9Sopenharmony_ciShared c_return_shared(); 9133d722a9Sopenharmony_ci::A::AShared c_return_ns_shared(); 9233d722a9Sopenharmony_ci::A::B::ABShared c_return_nested_ns_shared(); 9333d722a9Sopenharmony_cirust::Box<R> c_return_box(); 9433d722a9Sopenharmony_cistd::unique_ptr<C> c_return_unique_ptr(); 9533d722a9Sopenharmony_cistd::shared_ptr<C> c_return_shared_ptr(); 9633d722a9Sopenharmony_cistd::unique_ptr<::H::H> c_return_ns_unique_ptr(); 9733d722a9Sopenharmony_ciconst size_t &c_return_ref(const Shared &shared); 9833d722a9Sopenharmony_ciconst size_t &c_return_ns_ref(const ::A::AShared &shared); 9933d722a9Sopenharmony_ciconst size_t &c_return_nested_ns_ref(const ::A::B::ABShared &shared); 10033d722a9Sopenharmony_cisize_t &c_return_mut(Shared &shared); 10133d722a9Sopenharmony_cirust::Str c_return_str(const Shared &shared); 10233d722a9Sopenharmony_cirust::Slice<const char> c_return_slice_char(const Shared &shared); 10333d722a9Sopenharmony_cirust::Slice<uint8_t> c_return_mutsliceu8(rust::Slice<uint8_t> slice); 10433d722a9Sopenharmony_cirust::String c_return_rust_string(); 10533d722a9Sopenharmony_cirust::String c_return_rust_string_lossy(); 10633d722a9Sopenharmony_cistd::unique_ptr<std::string> c_return_unique_ptr_string(); 10733d722a9Sopenharmony_cistd::unique_ptr<std::vector<uint8_t>> c_return_unique_ptr_vector_u8(); 10833d722a9Sopenharmony_cistd::unique_ptr<std::vector<double>> c_return_unique_ptr_vector_f64(); 10933d722a9Sopenharmony_cistd::unique_ptr<std::vector<std::string>> c_return_unique_ptr_vector_string(); 11033d722a9Sopenharmony_cistd::unique_ptr<std::vector<Shared>> c_return_unique_ptr_vector_shared(); 11133d722a9Sopenharmony_cistd::unique_ptr<std::vector<C>> c_return_unique_ptr_vector_opaque(); 11233d722a9Sopenharmony_ciconst std::vector<uint8_t> &c_return_ref_vector(const C &c); 11333d722a9Sopenharmony_cistd::vector<uint8_t> &c_return_mut_vector(C &c); 11433d722a9Sopenharmony_cirust::Vec<uint8_t> c_return_rust_vec_u8(); 11533d722a9Sopenharmony_ciconst rust::Vec<uint8_t> &c_return_ref_rust_vec(const C &c); 11633d722a9Sopenharmony_cirust::Vec<uint8_t> &c_return_mut_rust_vec(C &c); 11733d722a9Sopenharmony_cirust::Vec<rust::String> c_return_rust_vec_string(); 11833d722a9Sopenharmony_cirust::Vec<bool> c_return_rust_vec_bool(); 11933d722a9Sopenharmony_cisize_t c_return_identity(size_t n); 12033d722a9Sopenharmony_cisize_t c_return_sum(size_t n1, size_t n2); 12133d722a9Sopenharmony_ciEnum c_return_enum(uint16_t n); 12233d722a9Sopenharmony_ci::A::AEnum c_return_ns_enum(uint16_t n); 12333d722a9Sopenharmony_ci::A::B::ABEnum c_return_nested_ns_enum(uint16_t n); 12433d722a9Sopenharmony_cistd::unique_ptr<Borrow> c_return_borrow(const std::string &s); 12533d722a9Sopenharmony_ciconst C *c_return_const_ptr(size_t n); 12633d722a9Sopenharmony_ciC *c_return_mut_ptr(size_t n); 12733d722a9Sopenharmony_ci 12833d722a9Sopenharmony_civoid c_take_primitive(size_t n); 12933d722a9Sopenharmony_civoid c_take_shared(Shared shared); 13033d722a9Sopenharmony_civoid c_take_ns_shared(::A::AShared shared); 13133d722a9Sopenharmony_civoid c_take_nested_ns_shared(::A::B::ABShared shared); 13233d722a9Sopenharmony_civoid c_take_box(rust::Box<R> r); 13333d722a9Sopenharmony_civoid c_take_unique_ptr(std::unique_ptr<C> c); 13433d722a9Sopenharmony_civoid c_take_ref_r(const R &r); 13533d722a9Sopenharmony_civoid c_take_ref_c(const C &c); 13633d722a9Sopenharmony_civoid c_take_ref_ns_c(const ::H::H &h); 13733d722a9Sopenharmony_civoid c_take_str(rust::Str s); 13833d722a9Sopenharmony_civoid c_take_slice_char(rust::Slice<const char> s); 13933d722a9Sopenharmony_civoid c_take_slice_shared(rust::Slice<const Shared> s); 14033d722a9Sopenharmony_civoid c_take_slice_shared_sort(rust::Slice<Shared> s); 14133d722a9Sopenharmony_civoid c_take_slice_r(rust::Slice<const R> s); 14233d722a9Sopenharmony_civoid c_take_slice_r_sort(rust::Slice<R> s); 14333d722a9Sopenharmony_civoid c_take_rust_string(rust::String s); 14433d722a9Sopenharmony_civoid c_take_unique_ptr_string(std::unique_ptr<std::string> s); 14533d722a9Sopenharmony_civoid c_take_unique_ptr_vector_u8(std::unique_ptr<std::vector<uint8_t>> v); 14633d722a9Sopenharmony_civoid c_take_unique_ptr_vector_f64(std::unique_ptr<std::vector<double>> v); 14733d722a9Sopenharmony_civoid c_take_unique_ptr_vector_string( 14833d722a9Sopenharmony_ci std::unique_ptr<std::vector<std::string>> v); 14933d722a9Sopenharmony_civoid c_take_unique_ptr_vector_shared(std::unique_ptr<std::vector<Shared>> v); 15033d722a9Sopenharmony_civoid c_take_ref_vector(const std::vector<uint8_t> &v); 15133d722a9Sopenharmony_civoid c_take_rust_vec(rust::Vec<uint8_t> v); 15233d722a9Sopenharmony_civoid c_take_rust_vec_index(rust::Vec<uint8_t> v); 15333d722a9Sopenharmony_civoid c_take_rust_vec_shared(rust::Vec<Shared> v); 15433d722a9Sopenharmony_civoid c_take_rust_vec_ns_shared(rust::Vec<::A::AShared> v); 15533d722a9Sopenharmony_civoid c_take_rust_vec_nested_ns_shared(rust::Vec<::A::B::ABShared> v); 15633d722a9Sopenharmony_civoid c_take_rust_vec_string(rust::Vec<rust::String> v); 15733d722a9Sopenharmony_civoid c_take_rust_vec_shared_index(rust::Vec<Shared> v); 15833d722a9Sopenharmony_civoid c_take_rust_vec_shared_push(rust::Vec<Shared> v); 15933d722a9Sopenharmony_civoid c_take_rust_vec_shared_truncate(rust::Vec<Shared> v); 16033d722a9Sopenharmony_civoid c_take_rust_vec_shared_clear(rust::Vec<Shared> v); 16133d722a9Sopenharmony_civoid c_take_rust_vec_shared_forward_iterator(rust::Vec<Shared> v); 16233d722a9Sopenharmony_civoid c_take_rust_vec_shared_sort(rust::Vec<Shared> v); 16333d722a9Sopenharmony_civoid c_take_ref_rust_vec(const rust::Vec<uint8_t> &v); 16433d722a9Sopenharmony_civoid c_take_ref_rust_vec_string(const rust::Vec<rust::String> &v); 16533d722a9Sopenharmony_civoid c_take_ref_rust_vec_index(const rust::Vec<uint8_t> &v); 16633d722a9Sopenharmony_civoid c_take_ref_rust_vec_copy(const rust::Vec<uint8_t> &v); 16733d722a9Sopenharmony_ciconst SharedString &c_take_ref_shared_string(const SharedString &s); 16833d722a9Sopenharmony_civoid c_take_callback(rust::Fn<size_t(rust::String)> callback); 16933d722a9Sopenharmony_civoid c_take_callback_ref(rust::Fn<void(const rust::String &)> callback); 17033d722a9Sopenharmony_civoid c_take_callback_mut(rust::Fn<void(rust::String &)> callback); 17133d722a9Sopenharmony_civoid c_take_enum(Enum e); 17233d722a9Sopenharmony_civoid c_take_ns_enum(::A::AEnum e); 17333d722a9Sopenharmony_civoid c_take_nested_ns_enum(::A::B::ABEnum e); 17433d722a9Sopenharmony_cisize_t c_take_const_ptr(const C *c); 17533d722a9Sopenharmony_cisize_t c_take_mut_ptr(C *c); 17633d722a9Sopenharmony_ci 17733d722a9Sopenharmony_civoid c_try_return_void(); 17833d722a9Sopenharmony_cisize_t c_try_return_primitive(); 17933d722a9Sopenharmony_cisize_t c_fail_return_primitive(); 18033d722a9Sopenharmony_cirust::Box<R> c_try_return_box(); 18133d722a9Sopenharmony_ciconst rust::String &c_try_return_ref(const rust::String &); 18233d722a9Sopenharmony_cirust::Str c_try_return_str(rust::Str); 18333d722a9Sopenharmony_cirust::Slice<const uint8_t> c_try_return_sliceu8(rust::Slice<const uint8_t>); 18433d722a9Sopenharmony_cirust::Slice<uint8_t> c_try_return_mutsliceu8(rust::Slice<uint8_t>); 18533d722a9Sopenharmony_cirust::String c_try_return_rust_string(); 18633d722a9Sopenharmony_cistd::unique_ptr<std::string> c_try_return_unique_ptr_string(); 18733d722a9Sopenharmony_cirust::Vec<uint8_t> c_try_return_rust_vec(); 18833d722a9Sopenharmony_cirust::Vec<rust::String> c_try_return_rust_vec_string(); 18933d722a9Sopenharmony_ciconst rust::Vec<uint8_t> &c_try_return_ref_rust_vec(const C &c); 19033d722a9Sopenharmony_ci 19133d722a9Sopenharmony_cisize_t c_get_use_count(const std::weak_ptr<C> &weak) noexcept; 19233d722a9Sopenharmony_ci 19333d722a9Sopenharmony_civoid c_take_trivial_ptr(std::unique_ptr<D> d); 19433d722a9Sopenharmony_civoid c_take_trivial_ref(const D &d); 19533d722a9Sopenharmony_civoid c_take_trivial_mut_ref(D &d); 19633d722a9Sopenharmony_civoid c_take_trivial_pin_ref(const D &d); 19733d722a9Sopenharmony_civoid c_take_trivial_pin_mut_ref(D &d); 19833d722a9Sopenharmony_civoid c_take_trivial(D d); 19933d722a9Sopenharmony_ci 20033d722a9Sopenharmony_civoid c_take_trivial_ns_ptr(std::unique_ptr<::G::G> g); 20133d722a9Sopenharmony_civoid c_take_trivial_ns_ref(const ::G::G &g); 20233d722a9Sopenharmony_civoid c_take_trivial_ns(::G::G g); 20333d722a9Sopenharmony_civoid c_take_opaque_ptr(std::unique_ptr<E> e); 20433d722a9Sopenharmony_civoid c_take_opaque_ns_ptr(std::unique_ptr<::F::F> f); 20533d722a9Sopenharmony_civoid c_take_opaque_ref(const E &e); 20633d722a9Sopenharmony_civoid c_take_opaque_ns_ref(const ::F::F &f); 20733d722a9Sopenharmony_cistd::unique_ptr<D> c_return_trivial_ptr(); 20833d722a9Sopenharmony_ciD c_return_trivial(); 20933d722a9Sopenharmony_cistd::unique_ptr<::G::G> c_return_trivial_ns_ptr(); 21033d722a9Sopenharmony_ci::G::G c_return_trivial_ns(); 21133d722a9Sopenharmony_cistd::unique_ptr<E> c_return_opaque_ptr(); 21233d722a9Sopenharmony_ciE &c_return_opaque_mut_pin(E &e); 21333d722a9Sopenharmony_cistd::unique_ptr<::F::F> c_return_ns_opaque_ptr(); 21433d722a9Sopenharmony_ci 21533d722a9Sopenharmony_cirust::String cOverloadedFunction(int32_t x); 21633d722a9Sopenharmony_cirust::String cOverloadedFunction(rust::Str x); 21733d722a9Sopenharmony_ci 21833d722a9Sopenharmony_ci} // namespace tests 21933d722a9Sopenharmony_ci 22033d722a9Sopenharmony_cinamespace other { 22133d722a9Sopenharmony_civoid ns_c_take_trivial(::tests::D d); 22233d722a9Sopenharmony_ci::tests::D ns_c_return_trivial(); 22333d722a9Sopenharmony_civoid ns_c_take_ns_shared(::A::AShared shared); 22433d722a9Sopenharmony_ci} // namespace other 22533d722a9Sopenharmony_ci 22633d722a9Sopenharmony_cinamespace I { 22733d722a9Sopenharmony_ciclass I { 22833d722a9Sopenharmony_ciprivate: 22933d722a9Sopenharmony_ci uint32_t a; 23033d722a9Sopenharmony_ci 23133d722a9Sopenharmony_cipublic: 23233d722a9Sopenharmony_ci I() : a(1000) {} 23333d722a9Sopenharmony_ci uint32_t get() const; 23433d722a9Sopenharmony_ci}; 23533d722a9Sopenharmony_ci 23633d722a9Sopenharmony_cistd::unique_ptr<I> ns_c_return_unique_ptr_ns(); 23733d722a9Sopenharmony_ci} // namespace I 238