blob: e9b0e0adeb29d9ccd81fd271f281424dead72ce6 [file]
extern crate serde;
extern crate serde_json;
use core::ffi::{c_char, c_int, CStr};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u8,
}
fn print_args(argc: c_int, argv: *mut *mut c_char) {
if argv.is_null() {
return;
}
for i in 1..argc {
let arg = unsafe { *argv.add(i as usize) };
if arg.is_null() {
continue;
}
let arg = unsafe { CStr::from_ptr(arg) }.to_string_lossy();
println!("{}: {}", i, arg);
}
}
// Function hello_rust_cargo without mangling
#[no_mangle]
pub extern "C" fn hello_rust_cargo_main(argc: c_int, argv: *mut *mut c_char) -> c_int {
print_args(argc, argv);
#[cfg(feature = "sim")]
println!("On simulator");
let john = Person {
name: "John".to_string(),
age: 30,
};
let json_str = serde_json::to_string(&john).unwrap();
println!("{}", json_str);
let jane = Person {
name: "Jane".to_string(),
age: 25,
};
let json_str_jane = serde_json::to_string(&jane).unwrap();
println!("{}", json_str_jane);
let json_data = r#"
{
"name": "Alice",
"age": 28
}"#;
let alice: Person = serde_json::from_str(json_data).unwrap();
println!("Deserialized: {} is {} years old", alice.name, alice.age);
let pretty_json_str = serde_json::to_string_pretty(&alice).unwrap();
println!("Pretty JSON:\n{}", pretty_json_str);
tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.unwrap()
.block_on(async {
println!("Hello world from tokio!");
});
0
}