mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-08-19 20:48:22 +00:00
Print each argument passed from nsh with its index, and report when the example is running on the simulator target. This makes the Rust example demonstrate both C argv handling and target-specific output. Signed-off-by: Shoji Tokunaga <toku@mac.com>
73 lines
1.7 KiB
Rust
73 lines
1.7 KiB
Rust
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
|
|
}
|