Files
jaarg/jaarg-nostd/examples/btreemap_nostd.rs

47 lines
1.6 KiB
Rust
Raw Permalink Normal View History

2025-11-07 06:41:34 +11:00
/* btreemap_nostd - jaarg example program using BTreeMap in `no_std`
* SPDX-FileCopyrightText: (C) 2025 Gay Pizza Specifications
* SPDX-License-Identifier: MIT OR Apache-2.0
2025-11-07 06:41:34 +11:00
*/
#![no_std]
#![no_main]
extern crate alloc;
use jaarg::{
alloc::ParseMapResult, ErrorUsageWriter, ErrorUsageWriterContext, HelpWriter, HelpWriterContext,
Opt, Opts, StandardErrorUsageWriter, StandardFullHelpWriter
};
use jaarg_nostd::{eprint, print, println, harness::ExitCode, simplepathbuf::SimplePathBuf};
#[no_mangle]
#[allow(improper_ctypes_definitions)]
extern "C" fn safe_main(args: &[&str]) -> ExitCode {
const OPTIONS: Opts<&'static str> = Opts::new(&[
Opt::help_flag("help", &["--help"]).help_text("Show this help"),
Opt::positional("positional", "positional").help_text("Positional argument"),
Opt::value("value", &["-v", "--value"], "string").help_text("Value option"),
Opt::flag("flag", &["-f", "--flag"]).help_text("Flag option"),
]);
let map = match OPTIONS.parse_map(
SimplePathBuf::from(*args.first().unwrap()).basename(),
args.iter().skip(1),
|program_name| {
let ctx = HelpWriterContext { options: &OPTIONS, program_name };
2025-11-07 06:41:34 +11:00
print!("{}", StandardFullHelpWriter::new(ctx));
},
|program_name, error| {
let ctx = ErrorUsageWriterContext { options: &OPTIONS, program_name, error };
2025-11-07 06:41:34 +11:00
eprint!("{}", StandardErrorUsageWriter::new(ctx));
}
) {
ParseMapResult::Map(map) => map,
ParseMapResult::ExitSuccess => { return ExitCode::SUCCESS; }
ParseMapResult::ExitFailure => { return ExitCode::FAILURE; }
};
println!("{:?}", map);
ExitCode::SUCCESS
}