diff options
author | Alberto Sartori <alberto.sartori@huawei.com> | 2024-07-23 17:24:16 +0200 |
---|---|---|
committer | Alberto Sartori <alberto.sartori@huawei.com> | 2024-07-24 13:06:28 +0200 |
commit | e7f2fc92c8fd64485d635b1cc7b0c2897d78bc69 (patch) | |
tree | a464901b31e83daafcbfb8049debeab732d4e6d0 /doc/interoperability/c-from-rust/main.rs | |
parent | d5426a260d88d90c8f275557d8f5ae8e1a55d367 (diff) | |
download | rules-rust-e7f2fc92c8fd64485d635b1cc7b0c2897d78bc69.tar.gz |
rules-rust: add interoperability tutorials
Diffstat (limited to 'doc/interoperability/c-from-rust/main.rs')
-rw-r--r-- | doc/interoperability/c-from-rust/main.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/doc/interoperability/c-from-rust/main.rs b/doc/interoperability/c-from-rust/main.rs new file mode 100644 index 0000000..ff27dd7 --- /dev/null +++ b/doc/interoperability/c-from-rust/main.rs @@ -0,0 +1,21 @@ +use std::env; + +// declaration of the function implemented in the C library +extern "C" { + fn c_func(input: i32) -> i32; +} + +// wrapper to call the C function +fn c_call(i: i32) -> i32 { + unsafe { + return c_func(i); + } +} + +fn main() { + let args: Vec<String> = env::args().collect(); + match args[1].parse::<i32>() { + Ok(i) => println!("Absolute value of {} is {}", i, c_call(i)), + Err(..) => println!("Wrong argument {}", args[1]), + }; +} |