blob: be145f37f245e5a7bbbf7bd1974953a9f96f3113 [file] [log] [blame]
David Tolnaya95b2342020-04-09 23:26:05 -07001#![allow(
2 clippy::boxed_local,
3 clippy::ptr_arg,
4 clippy::trivially_copy_pass_by_ref
5)]
David Tolnay265f6a02020-03-18 20:13:55 -07006
Adrian Taylor0fac3212020-10-25 21:52:55 -07007pub mod class_in_ns;
Adrian Taylor121cca42020-10-10 15:32:00 -07008pub mod extra;
David Tolnay362c9f92020-10-10 16:29:58 -07009pub mod module;
David Tolnaya62cca22020-05-07 21:52:16 -070010
David Tolnay5df0a712020-09-24 15:58:28 -040011use cxx::{CxxString, CxxVector, UniquePtr};
David Tolnayb6c5ea72020-03-16 13:36:28 -070012use std::fmt::{self, Display};
David Tolnayad5b8af2020-01-26 16:59:13 -080013
Adrian Taylor121cca42020-10-10 15:32:00 -070014mod other {
15 use cxx::kind::{Opaque, Trivial};
16 use cxx::{type_id, CxxString, ExternType};
17
18 #[repr(C)]
19 pub struct D {
Adrian Taylord75f7e22020-10-12 15:54:54 -070020 pub d: u64,
Adrian Taylor121cca42020-10-10 15:32:00 -070021 }
22
23 #[repr(C)]
24 pub struct E {
Adrian Taylord75f7e22020-10-12 15:54:54 -070025 e: u64,
David Tolnay441956e2020-10-16 13:21:51 -070026 e_str: CxxString,
Adrian Taylord75f7e22020-10-12 15:54:54 -070027 }
28
Adrian Taylor5e79c642020-10-24 21:09:42 -070029 pub mod f {
30 use cxx::kind::Opaque;
31 use cxx::{type_id, CxxString, ExternType};
32
33 #[repr(C)]
34 pub struct F {
35 e: u64,
36 e_str: CxxString,
37 }
38
39 unsafe impl ExternType for F {
40 type Id = type_id!("F::F");
41 type Kind = Opaque;
42 }
43 }
44
Adrian Taylor585bb0b2020-10-26 13:17:17 -070045 #[repr(C)]
46 pub struct G {
47 pub g: u64,
48 }
49
50 unsafe impl ExternType for G {
51 type Id = type_id!("G::G");
52 type Kind = Trivial;
53 }
54
Adrian Taylor121cca42020-10-10 15:32:00 -070055 unsafe impl ExternType for D {
56 type Id = type_id!("tests::D");
57 type Kind = Trivial;
58 }
59
60 unsafe impl ExternType for E {
61 type Id = type_id!("tests::E");
62 type Kind = Opaque;
63 }
64}
65
David Tolnay97c72102020-01-25 16:49:00 -080066#[cxx::bridge(namespace = tests)]
67pub mod ffi {
Stephen Crane9e48d5b2020-08-21 12:17:02 -070068 #[derive(Clone)]
David Tolnayad5b8af2020-01-26 16:59:13 -080069 struct Shared {
70 z: usize,
71 }
72
Joel Galensonc03402a2020-04-23 17:31:09 -070073 enum Enum {
74 AVal,
75 BVal = 2020,
76 CVal,
77 }
78
Adrian Taylor9a158e42020-10-24 20:51:25 -070079 #[namespace(namespace = A)]
80 #[derive(Clone)]
81 struct AShared {
82 z: usize,
83 }
84
85 #[namespace(namespace = A)]
86 enum AEnum {
87 AAVal,
88 ABVal = 2020,
89 ACVal,
90 }
91
92 #[namespace(namespace = A::B)]
93 enum ABEnum {
94 ABAVal,
95 ABBVal = 2020,
96 ABCVal,
97 }
98
99 #[namespace(namespace = A::B)]
100 #[derive(Clone)]
101 struct ABShared {
102 z: usize,
103 }
104
David Tolnay97c72102020-01-25 16:49:00 -0800105 extern "C" {
David Tolnayd41eef52020-10-07 16:33:55 -0700106 include!("tests/ffi/tests.h");
David Tolnayad5b8af2020-01-26 16:59:13 -0800107
108 type C;
109
110 fn c_return_primitive() -> usize;
111 fn c_return_shared() -> Shared;
David Tolnaybe13d8a2020-03-06 15:45:39 -0800112 fn c_return_box() -> Box<R>;
David Tolnayad5b8af2020-01-26 16:59:13 -0800113 fn c_return_unique_ptr() -> UniquePtr<C>;
114 fn c_return_ref(shared: &Shared) -> &usize;
David Tolnay18d93b62020-08-27 00:55:48 -0700115 fn c_return_mut(shared: &mut Shared) -> &mut usize;
David Tolnayad5b8af2020-01-26 16:59:13 -0800116 fn c_return_str(shared: &Shared) -> &str;
Adrian Taylorf5dd5522020-04-13 16:50:14 -0700117 fn c_return_sliceu8(shared: &Shared) -> &[u8];
David Tolnayad5b8af2020-01-26 16:59:13 -0800118 fn c_return_rust_string() -> String;
119 fn c_return_unique_ptr_string() -> UniquePtr<CxxString>;
David Tolnaye1dcdf72020-04-24 17:40:55 -0700120 fn c_return_unique_ptr_vector_u8() -> UniquePtr<CxxVector<u8>>;
121 fn c_return_unique_ptr_vector_f64() -> UniquePtr<CxxVector<f64>>;
David Tolnay47e239d2020-08-28 00:32:04 -0700122 fn c_return_unique_ptr_vector_string() -> UniquePtr<CxxVector<CxxString>>;
David Tolnaye1dcdf72020-04-24 17:40:55 -0700123 fn c_return_unique_ptr_vector_shared() -> UniquePtr<CxxVector<Shared>>;
David Tolnay1bcc9fe2020-04-25 13:51:07 -0700124 fn c_return_unique_ptr_vector_opaque() -> UniquePtr<CxxVector<C>>;
David Tolnayde5340e2020-04-25 14:03:21 -0700125 fn c_return_ref_vector(c: &C) -> &CxxVector<u8>;
David Tolnay18d93b62020-08-27 00:55:48 -0700126 fn c_return_mut_vector(c: &mut C) -> &mut CxxVector<u8>;
David Tolnayb41e74c2020-04-25 15:06:18 -0700127 fn c_return_rust_vec() -> Vec<u8>;
David Tolnay77989692020-04-25 15:57:47 -0700128 fn c_return_ref_rust_vec(c: &C) -> &Vec<u8>;
David Tolnay18d93b62020-08-27 00:55:48 -0700129 fn c_return_mut_rust_vec(c: &mut C) -> &mut Vec<u8>;
David Tolnay33f56ad2020-08-27 17:06:35 -0700130 fn c_return_rust_vec_string() -> Vec<String>;
Joel Galensonba676072020-04-27 15:55:45 -0700131 fn c_return_identity(_: usize) -> usize;
132 fn c_return_sum(_: usize, _: usize) -> usize;
David Tolnayf6a89f22020-05-10 23:39:27 -0700133 fn c_return_enum(n: u16) -> Enum;
Adrian Taylor9a158e42020-10-24 20:51:25 -0700134 fn c_return_ns_ref(shared: &AShared) -> &usize;
135 fn c_return_nested_ns_ref(shared: &ABShared) -> &usize;
136 fn c_return_ns_enum(n: u16) -> AEnum;
137 fn c_return_nested_ns_enum(n: u16) -> ABEnum;
David Tolnayad5b8af2020-01-26 16:59:13 -0800138
139 fn c_take_primitive(n: usize);
140 fn c_take_shared(shared: Shared);
141 fn c_take_box(r: Box<R>);
David Tolnaya7d00e82020-03-06 15:50:14 -0800142 fn c_take_ref_r(r: &R);
David Tolnayad5b8af2020-01-26 16:59:13 -0800143 fn c_take_ref_c(c: &C);
144 fn c_take_str(s: &str);
Adrian Taylorf5dd5522020-04-13 16:50:14 -0700145 fn c_take_sliceu8(s: &[u8]);
David Tolnayad5b8af2020-01-26 16:59:13 -0800146 fn c_take_rust_string(s: String);
147 fn c_take_unique_ptr_string(s: UniquePtr<CxxString>);
David Tolnay9b304202020-04-25 13:54:55 -0700148 fn c_take_unique_ptr_vector_u8(v: UniquePtr<CxxVector<u8>>);
149 fn c_take_unique_ptr_vector_f64(v: UniquePtr<CxxVector<f64>>);
David Tolnay47e239d2020-08-28 00:32:04 -0700150 fn c_take_unique_ptr_vector_string(v: UniquePtr<CxxVector<CxxString>>);
David Tolnay9b304202020-04-25 13:54:55 -0700151 fn c_take_unique_ptr_vector_shared(v: UniquePtr<CxxVector<Shared>>);
David Tolnay2244d1f2020-04-25 13:58:18 -0700152 fn c_take_ref_vector(v: &CxxVector<u8>);
David Tolnayd2ce8a92020-04-25 16:16:45 -0700153 fn c_take_rust_vec(v: Vec<u8>);
154 fn c_take_rust_vec_shared(v: Vec<Shared>);
David Tolnay33f56ad2020-08-27 17:06:35 -0700155 fn c_take_rust_vec_string(v: Vec<String>);
Stephen Crane9e48d5b2020-08-21 12:17:02 -0700156 fn c_take_rust_vec_index(v: Vec<u8>);
157 fn c_take_rust_vec_shared_index(v: Vec<Shared>);
myronahnda9be502020-04-29 05:47:23 +0700158 fn c_take_rust_vec_shared_forward_iterator(v: Vec<Shared>);
David Tolnayd2ce8a92020-04-25 16:16:45 -0700159 fn c_take_ref_rust_vec(v: &Vec<u8>);
David Tolnay33f56ad2020-08-27 17:06:35 -0700160 fn c_take_ref_rust_vec_string(v: &Vec<String>);
Stephen Crane9e48d5b2020-08-21 12:17:02 -0700161 fn c_take_ref_rust_vec_index(v: &Vec<u8>);
myronahnda9be502020-04-29 05:47:23 +0700162 fn c_take_ref_rust_vec_copy(v: &Vec<u8>);
David Tolnay0c8c0f22020-07-21 17:57:46 -0700163 /*
164 // https://github.com/dtolnay/cxx/issues/232
David Tolnay75dca2e2020-03-25 20:17:52 -0700165 fn c_take_callback(callback: fn(String) -> usize);
David Tolnay0c8c0f22020-07-21 17:57:46 -0700166 */
Joel Galensonc03402a2020-04-23 17:31:09 -0700167 fn c_take_enum(e: Enum);
Adrian Taylor9a158e42020-10-24 20:51:25 -0700168 fn c_take_ns_enum(e: AEnum);
169 fn c_take_nested_ns_enum(e: ABEnum);
170 fn c_take_ns_shared(shared: AShared);
171 fn c_take_nested_ns_shared(shared: ABShared);
172 fn c_take_rust_vec_ns_shared(v: Vec<AShared>);
173 fn c_take_rust_vec_nested_ns_shared(v: Vec<ABShared>);
David Tolnayebef4a22020-03-17 15:33:47 -0700174
175 fn c_try_return_void() -> Result<()>;
176 fn c_try_return_primitive() -> Result<usize>;
177 fn c_fail_return_primitive() -> Result<usize>;
David Tolnay99642622020-03-25 13:07:35 -0700178 fn c_try_return_box() -> Result<Box<R>>;
179 fn c_try_return_ref(s: &String) -> Result<&String>;
180 fn c_try_return_str(s: &str) -> Result<&str>;
Adrian Taylorf5dd5522020-04-13 16:50:14 -0700181 fn c_try_return_sliceu8(s: &[u8]) -> Result<&[u8]>;
David Tolnay99642622020-03-25 13:07:35 -0700182 fn c_try_return_rust_string() -> Result<String>;
183 fn c_try_return_unique_ptr_string() -> Result<UniquePtr<CxxString>>;
David Tolnay8b9d1762020-04-25 16:05:46 -0700184 fn c_try_return_rust_vec() -> Result<Vec<u8>>;
David Tolnay33f56ad2020-08-27 17:06:35 -0700185 fn c_try_return_rust_vec_string() -> Result<Vec<String>>;
David Tolnay77989692020-04-25 15:57:47 -0700186 fn c_try_return_ref_rust_vec(c: &C) -> Result<&Vec<u8>>;
Joel Galenson3d4f6122020-04-07 15:54:05 -0700187
188 fn get(self: &C) -> usize;
189 fn set(self: &mut C, n: usize) -> usize;
Joel Galensone1e969d2020-04-21 12:50:20 -0700190 fn get2(&self) -> usize;
191 fn set2(&mut self, n: usize) -> usize;
myronahne3b78ea2020-05-23 01:08:13 +0700192 fn set_succeed(&mut self, n: usize) -> Result<usize>;
193 fn get_fail(&mut self) -> Result<usize>;
David Tolnay3bbcdbb2020-10-09 19:29:44 -0700194
195 #[rust_name = "i32_overloaded_method"]
196 fn cOverloadedMethod(&self, x: i32) -> String;
197 #[rust_name = "str_overloaded_method"]
198 fn cOverloadedMethod(&self, x: &str) -> String;
199 #[rust_name = "i32_overloaded_function"]
200 fn cOverloadedFunction(x: i32) -> String;
201 #[rust_name = "str_overloaded_function"]
202 fn cOverloadedFunction(x: &str) -> String;
Adrian Taylorddc146e2020-10-25 21:40:17 -0700203
204 #[namespace (namespace = other)]
205 fn ns_c_take_ns_shared(shared: AShared);
David Tolnay97c72102020-01-25 16:49:00 -0800206 }
David Tolnayad5b8af2020-01-26 16:59:13 -0800207
Joel Galenson0f654ff2020-05-04 20:04:21 -0700208 extern "C" {
209 type COwnedEnum;
210 }
211
David Tolnayf6a89f22020-05-10 23:39:27 -0700212 #[repr(u32)]
Joel Galenson0f654ff2020-05-04 20:04:21 -0700213 enum COwnedEnum {
214 CVal1,
215 CVal2,
216 }
217
David Tolnayad5b8af2020-01-26 16:59:13 -0800218 extern "Rust" {
219 type R;
Joel Galensonc1c4e7a2020-04-15 10:21:00 -0700220 type R2;
David Tolnayad5b8af2020-01-26 16:59:13 -0800221
222 fn r_return_primitive() -> usize;
223 fn r_return_shared() -> Shared;
David Tolnay5cd8d612020-03-06 15:56:30 -0800224 fn r_return_box() -> Box<R>;
David Tolnay4b3a66e2020-03-06 16:14:00 -0800225 fn r_return_unique_ptr() -> UniquePtr<C>;
David Tolnayad5b8af2020-01-26 16:59:13 -0800226 fn r_return_ref(shared: &Shared) -> &usize;
David Tolnay18d93b62020-08-27 00:55:48 -0700227 fn r_return_mut(shared: &mut Shared) -> &mut usize;
David Tolnayad5b8af2020-01-26 16:59:13 -0800228 fn r_return_str(shared: &Shared) -> &str;
229 fn r_return_rust_string() -> String;
David Tolnay85db24862020-03-06 16:24:41 -0800230 fn r_return_unique_ptr_string() -> UniquePtr<CxxString>;
David Tolnay83c69e92020-04-25 16:59:39 -0700231 fn r_return_rust_vec() -> Vec<u8>;
David Tolnay33f56ad2020-08-27 17:06:35 -0700232 fn r_return_rust_vec_string() -> Vec<String>;
David Tolnay83c69e92020-04-25 16:59:39 -0700233 fn r_return_ref_rust_vec(shared: &Shared) -> &Vec<u8>;
David Tolnay18d93b62020-08-27 00:55:48 -0700234 fn r_return_mut_rust_vec(shared: &mut Shared) -> &mut Vec<u8>;
Joel Galensonba676072020-04-27 15:55:45 -0700235 fn r_return_identity(_: usize) -> usize;
236 fn r_return_sum(_: usize, _: usize) -> usize;
Joel Galensonc03402a2020-04-23 17:31:09 -0700237 fn r_return_enum(n: u32) -> Enum;
David Tolnayad5b8af2020-01-26 16:59:13 -0800238
239 fn r_take_primitive(n: usize);
240 fn r_take_shared(shared: Shared);
241 fn r_take_box(r: Box<R>);
242 fn r_take_unique_ptr(c: UniquePtr<C>);
243 fn r_take_ref_r(r: &R);
244 fn r_take_ref_c(c: &C);
245 fn r_take_str(s: &str);
Adrian Taylorf5dd5522020-04-13 16:50:14 -0700246 fn r_take_sliceu8(s: &[u8]);
David Tolnayad5b8af2020-01-26 16:59:13 -0800247 fn r_take_rust_string(s: String);
248 fn r_take_unique_ptr_string(s: UniquePtr<CxxString>);
David Tolnay5df0a712020-09-24 15:58:28 -0400249 fn r_take_ref_vector(v: &CxxVector<u8>);
David Tolnay80631e92020-09-24 16:07:30 -0400250 fn r_take_ref_empty_vector(v: &CxxVector<u64>);
David Tolnay83c69e92020-04-25 16:59:39 -0700251 fn r_take_rust_vec(v: Vec<u8>);
David Tolnay33f56ad2020-08-27 17:06:35 -0700252 fn r_take_rust_vec_string(v: Vec<String>);
David Tolnay83c69e92020-04-25 16:59:39 -0700253 fn r_take_ref_rust_vec(v: &Vec<u8>);
David Tolnay33f56ad2020-08-27 17:06:35 -0700254 fn r_take_ref_rust_vec_string(v: &Vec<String>);
Joel Galensonc03402a2020-04-23 17:31:09 -0700255 fn r_take_enum(e: Enum);
David Tolnayb6c5ea72020-03-16 13:36:28 -0700256
David Tolnaycecada62020-03-17 01:45:58 -0700257 fn r_try_return_void() -> Result<()>;
David Tolnayb6c5ea72020-03-16 13:36:28 -0700258 fn r_try_return_primitive() -> Result<usize>;
David Tolnay22602b42020-09-21 18:04:05 -0400259 fn r_try_return_box() -> Result<Box<R>>;
David Tolnayb6c5ea72020-03-16 13:36:28 -0700260 fn r_fail_return_primitive() -> Result<usize>;
Joel Galensonc1c4e7a2020-04-15 10:21:00 -0700261
262 fn r_return_r2(n: usize) -> Box<R2>;
263 fn get(self: &R2) -> usize;
264 fn set(self: &mut R2, n: usize) -> usize;
David Tolnay3bbcdbb2020-10-09 19:29:44 -0700265
266 #[cxx_name = "rAliasedFunction"]
267 fn r_aliased_function(x: i32) -> String;
David Tolnayad5b8af2020-01-26 16:59:13 -0800268 }
269}
270
David Tolnaybe13d8a2020-03-06 15:45:39 -0800271pub type R = usize;
David Tolnayad5b8af2020-01-26 16:59:13 -0800272
Joel Galensonc1c4e7a2020-04-15 10:21:00 -0700273pub struct R2(usize);
274
275impl R2 {
276 fn get(&self) -> usize {
277 self.0
278 }
279
280 fn set(&mut self, n: usize) -> usize {
281 self.0 = n;
282 n
283 }
284}
285
David Tolnayb6c5ea72020-03-16 13:36:28 -0700286#[derive(Debug)]
287struct Error;
288
289impl std::error::Error for Error {}
290
291impl Display for Error {
292 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
293 f.write_str("rust error")
294 }
295}
296
David Tolnayad5b8af2020-01-26 16:59:13 -0800297fn r_return_primitive() -> usize {
298 2020
299}
300
301fn r_return_shared() -> ffi::Shared {
302 ffi::Shared { z: 2020 }
303}
304
David Tolnay5cd8d612020-03-06 15:56:30 -0800305fn r_return_box() -> Box<R> {
306 Box::new(2020)
307}
308
David Tolnay4b3a66e2020-03-06 16:14:00 -0800309fn r_return_unique_ptr() -> UniquePtr<ffi::C> {
310 extern "C" {
311 fn cxx_test_suite_get_unique_ptr() -> *mut ffi::C;
312 }
313 unsafe { UniquePtr::from_raw(cxx_test_suite_get_unique_ptr()) }
314}
315
David Tolnayad5b8af2020-01-26 16:59:13 -0800316fn r_return_ref(shared: &ffi::Shared) -> &usize {
317 &shared.z
318}
319
David Tolnay18d93b62020-08-27 00:55:48 -0700320fn r_return_mut(shared: &mut ffi::Shared) -> &mut usize {
321 &mut shared.z
322}
323
David Tolnayad5b8af2020-01-26 16:59:13 -0800324fn r_return_str(shared: &ffi::Shared) -> &str {
325 let _ = shared;
326 "2020"
327}
328
329fn r_return_rust_string() -> String {
330 "2020".to_owned()
331}
332
David Tolnay85db24862020-03-06 16:24:41 -0800333fn r_return_unique_ptr_string() -> UniquePtr<CxxString> {
334 extern "C" {
335 fn cxx_test_suite_get_unique_ptr_string() -> *mut CxxString;
336 }
337 unsafe { UniquePtr::from_raw(cxx_test_suite_get_unique_ptr_string()) }
338}
339
David Tolnay83c69e92020-04-25 16:59:39 -0700340fn r_return_rust_vec() -> Vec<u8> {
341 Vec::new()
342}
343
David Tolnay33f56ad2020-08-27 17:06:35 -0700344fn r_return_rust_vec_string() -> Vec<String> {
345 Vec::new()
346}
347
David Tolnay83c69e92020-04-25 16:59:39 -0700348fn r_return_ref_rust_vec(shared: &ffi::Shared) -> &Vec<u8> {
349 let _ = shared;
350 unimplemented!()
351}
352
David Tolnay18d93b62020-08-27 00:55:48 -0700353fn r_return_mut_rust_vec(shared: &mut ffi::Shared) -> &mut Vec<u8> {
354 let _ = shared;
355 unimplemented!()
356}
357
Joel Galensonba676072020-04-27 15:55:45 -0700358fn r_return_identity(n: usize) -> usize {
359 n
360}
361
362fn r_return_sum(n1: usize, n2: usize) -> usize {
363 n1 + n2
364}
365
Joel Galensonc03402a2020-04-23 17:31:09 -0700366fn r_return_enum(n: u32) -> ffi::Enum {
David Tolnay884d91f2020-05-05 10:17:23 -0700367 if n == 0 {
Joel Galensonc03402a2020-04-23 17:31:09 -0700368 ffi::Enum::AVal
369 } else if n <= 2020 {
370 ffi::Enum::BVal
371 } else {
372 ffi::Enum::CVal
373 }
374}
375
David Tolnayad5b8af2020-01-26 16:59:13 -0800376fn r_take_primitive(n: usize) {
David Tolnayf306da42020-02-22 19:55:43 -0800377 assert_eq!(n, 2020);
David Tolnayad5b8af2020-01-26 16:59:13 -0800378}
379
380fn r_take_shared(shared: ffi::Shared) {
David Tolnayf306da42020-02-22 19:55:43 -0800381 assert_eq!(shared.z, 2020);
David Tolnayad5b8af2020-01-26 16:59:13 -0800382}
383
384fn r_take_box(r: Box<R>) {
385 let _ = r;
386}
387
388fn r_take_unique_ptr(c: UniquePtr<ffi::C>) {
389 let _ = c;
390}
391
392fn r_take_ref_r(r: &R) {
393 let _ = r;
394}
395
396fn r_take_ref_c(c: &ffi::C) {
397 let _ = c;
398}
399
400fn r_take_str(s: &str) {
David Tolnayf306da42020-02-22 19:55:43 -0800401 assert_eq!(s, "2020");
David Tolnayad5b8af2020-01-26 16:59:13 -0800402}
403
404fn r_take_rust_string(s: String) {
David Tolnayf306da42020-02-22 19:55:43 -0800405 assert_eq!(s, "2020");
David Tolnayad5b8af2020-01-26 16:59:13 -0800406}
407
Adrian Taylorf5dd5522020-04-13 16:50:14 -0700408fn r_take_sliceu8(s: &[u8]) {
409 assert_eq!(s.len(), 5);
David Tolnayefe81052020-04-14 16:28:24 -0700410 assert_eq!(std::str::from_utf8(s).unwrap(), "2020\0");
Adrian Taylorf5dd5522020-04-13 16:50:14 -0700411}
412
David Tolnayad5b8af2020-01-26 16:59:13 -0800413fn r_take_unique_ptr_string(s: UniquePtr<CxxString>) {
David Tolnayf306da42020-02-22 19:55:43 -0800414 assert_eq!(s.as_ref().unwrap().to_str().unwrap(), "2020");
David Tolnay97c72102020-01-25 16:49:00 -0800415}
David Tolnayb6c5ea72020-03-16 13:36:28 -0700416
David Tolnay5df0a712020-09-24 15:58:28 -0400417fn r_take_ref_vector(v: &CxxVector<u8>) {
418 let slice = v.as_slice();
419 assert_eq!(slice, [20, 2, 0]);
420}
421
David Tolnay80631e92020-09-24 16:07:30 -0400422fn r_take_ref_empty_vector(v: &CxxVector<u64>) {
423 assert!(v.as_slice().is_empty());
424 assert!(v.is_empty());
425}
426
David Tolnay83c69e92020-04-25 16:59:39 -0700427fn r_take_rust_vec(v: Vec<u8>) {
428 let _ = v;
429}
430
David Tolnay33f56ad2020-08-27 17:06:35 -0700431fn r_take_rust_vec_string(v: Vec<String>) {
432 let _ = v;
433}
434
David Tolnay83c69e92020-04-25 16:59:39 -0700435fn r_take_ref_rust_vec(v: &Vec<u8>) {
436 let _ = v;
437}
438
David Tolnay33f56ad2020-08-27 17:06:35 -0700439fn r_take_ref_rust_vec_string(v: &Vec<String>) {
440 let _ = v;
441}
442
Joel Galensonc03402a2020-04-23 17:31:09 -0700443fn r_take_enum(e: ffi::Enum) {
444 let _ = e;
445}
446
David Tolnaycecada62020-03-17 01:45:58 -0700447fn r_try_return_void() -> Result<(), Error> {
448 Ok(())
449}
450
David Tolnayb6c5ea72020-03-16 13:36:28 -0700451fn r_try_return_primitive() -> Result<usize, Error> {
452 Ok(2020)
453}
454
David Tolnay22602b42020-09-21 18:04:05 -0400455fn r_try_return_box() -> Result<Box<R>, Error> {
456 Ok(Box::new(2020))
457}
458
David Tolnayb6c5ea72020-03-16 13:36:28 -0700459fn r_fail_return_primitive() -> Result<usize, Error> {
460 Err(Error)
461}
Joel Galensonc1c4e7a2020-04-15 10:21:00 -0700462
463fn r_return_r2(n: usize) -> Box<R2> {
464 Box::new(R2(n))
465}
David Tolnay3bbcdbb2020-10-09 19:29:44 -0700466
467fn r_aliased_function(x: i32) -> String {
468 x.to_string()
469}