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