#parser #rationale #noshell

noshell-parser

noshell, a no_std argument parser and a shell for constrained systems

3 unstable releases

Uses new Rust 2024

new 0.2.0 Mar 30, 2025
0.1.1 Mar 8, 2025
0.1.0 Mar 8, 2025

#7 in #rationale

Download history 212/week @ 2025-03-05 34/week @ 2025-03-12 107/week @ 2025-03-26

353 downloads per month
Used in noshell

Apache-2.0 OR MIT

19KB
338 lines

noshell

crates.io crates.io Documentation

noshell, a no_std argument parser and a shell for constrained systems.

Rationale

This crate provides a working but yet minimal implementation of a argument parser. It could be used for parsing command line arguments in applications that require a shell for instance.

This crate does not rely on crate alloc but heapless for the result of argument parsing. This could be mitigated and improved in a near future. As such, it could be used in very constrained and critical embedded developments.

Example

#[derive(Debug, noshell::Parser)]
struct MyArgs {
    retries: Option<u32>,
}

fn main() -> {
    let cmdline = &["--retries", "3"];

    let args = MyArgs::parser(cmdline).unwrap();

    if let Some(retries) = args.retries {
        println!("You have {} retries left!", retries);
    }
}

Status

This crate is still a work in progress and is subject to huge changes in its API.

Roadmap

  • Add support for noline crate, waiting for a custom handling of terminal escape codes.
  • Add more parsers for destination value like Option<Vec<_>> or Vec<_> for instance.
  • Add automatic generation of help output.
  • Add completion thanks to escape codes (i.e. a press on Tab for instance).
  • Add support for subcommands and related global and local arguments

Please feel free to email me with suggestions or directly propose a Pull Request with some valuable contribution. As it is the beginning of the project, I will take time to studi every contribution.

License

This work is licensed under either

  • APACHE License, version 2.0
  • MIT License

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Credits

I would like to give a big thank to the creator and contributors of the crate clap, which I draw a lot of inspiration from.

Dependencies

~0.7–1.2MB
~27K SLoC