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 }