summaryrefslogtreecommitdiff
path: root/examples/rust/src/hello.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/rust/src/hello.rs')
-rw-r--r--examples/rust/src/hello.rs30
1 files changed, 20 insertions, 10 deletions
diff --git a/examples/rust/src/hello.rs b/examples/rust/src/hello.rs
index 34f3c7f..6bb6d97 100644
--- a/examples/rust/src/hello.rs
+++ b/examples/rust/src/hello.rs
@@ -1,18 +1,28 @@
-#![no_std]
#![no_main]
-#[cfg(not(test))]
-#[panic_handler]
-fn panic(_info: &core::panic::PanicInfo) -> ! {
- core::arch::wasm32::unreachable()
-}
-
#[link(wasm_import_module = "env")]
extern "C" {
- fn printi32(x: i32);
+ fn print_utf8(location: i32, len: i32);
+}
+
+const ARG: &[u8] = &[0u8; 100];
+
+#[no_mangle]
+pub unsafe extern "C" fn arg_ptr() -> i32 {
+ ARG.as_ptr() as i32
}
#[no_mangle]
-pub unsafe extern "C" fn add_and_print(lh: i32, rh: i32) {
- printi32(lh + rh);
+pub unsafe extern "C" fn arg_size() -> i32 {
+ ARG.len() as i32
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn hello(len: i32) {
+ let arg = core::str::from_utf8(&ARG[0..len as usize]).unwrap();
+ let res = format!("Hello, {}!", arg).as_bytes().to_vec();
+
+ let len = res.len() as i32;
+ let ptr = res.leak().as_ptr() as i32;
+ print_utf8(ptr, len);
}