# Clientele.rs [![License](https://img.shields.io/badge/license-Public%20Domain-blue.svg)](https://unlicense.org) [![Compatibility](https://img.shields.io/badge/rust-1.70%2B-blue)](https://rust-lang.org) [![Package](https://img.shields.io/crates/v/clientele)](https://crates.io/crates/clientele) **Clientele** makes it easy to write superb command-line utilities in Rust that follow consistent best practices on all target platforms including Linux, macOS, and Windows. It packages and re-exports [`clap`], [`camino`], [`dotenvy`], [`argfile`], and [`wild`] into a single easy dependency. ## ✨ Features - Showcases how to structure a CLI program in Rust (see the [examples](#-examples)). - Loads environment variables from `.env` files (using the [`dotenvy`] crate). - Expands wildcards (globs) on Windows (using the [`wild`] crate). - Expands @argfiles similarly to [`javac`] or Python (using the [`argfile`] crate). - Defines a standard set of essential CLI options (using the [`clap`] crate). - Provides the [`Utf8Path`] and [`Utf8PathBuf`] types (using the [`camino`] crate). - Supports opting out of any feature using comprehensive feature flags. - Adheres to the Rust API Guidelines in its [naming conventions]. - 100% free and unencumbered public domain software. ## 🛠️ Prerequisites - [Rust](https://rust-lang.org) 1.70+ ## ⬇️ Installation ### Installation via Cargo ```bash cargo add clientele ``` ## 👉 Examples See [`lib/clientele/examples/skeleton/main.rs`] for a complete example. ### Importing the library ```rust use clientele::*; ``` ## 📚 Reference ### Options #### [`StandardOptions`] ```text Options: --color Set the color output mode [default: auto] [possible values: auto, always, never] -d, --debug Enable debugging output --license Show license information -v, --verbose... Enable verbose output (may be repeated for more verbosity) -V, --version Print version information -h, --help Print help ``` ## 👨‍💻 Development ```bash git clone https://github.com/artob/clientele.rs.git ``` - - - [![Share on Twitter](https://img.shields.io/badge/share%20on-twitter-03A9F4?logo=twitter)](https://twitter.com/share?url=https://github.com/artob/clientele.rs&text=Clientele.rs) [![Share on Reddit](https://img.shields.io/badge/share%20on-reddit-red?logo=reddit)](https://reddit.com/submit?url=https://github.com/artob/clientele.rs&title=Clientele.rs) [![Share on Hacker News](https://img.shields.io/badge/share%20on-hacker%20news-orange?logo=ycombinator)](https://news.ycombinator.com/submitlink?u=https://github.com/artob/clientele.rs&t=Clientele.rs) [![Share on Facebook](https://img.shields.io/badge/share%20on-facebook-1976D2?logo=facebook)](https://www.facebook.com/sharer/sharer.php?u=https://github.com/artob/clientele.rs) [naming conventions]: https://rust-lang.github.io/api-guidelines/naming.html [`StandardOptions`]: https://docs.rs/clientele/latest/clientele/struct.StandardOptions.html [`Utf8Path`]: https://docs.rs/camino/latest/camino/struct.Utf8Path.html [`Utf8PathBuf`]: https://docs.rs/camino/latest/camino/struct.Utf8PathBuf.html [`javac`]: https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#commandlineargfile [`lib/clientele/examples/skeleton/main.rs`]: lib/clientele/examples/skeleton/main.rs [`argfile`]: https://crates.io/crates/argfile [`camino`]: https://crates.io/crates/camino [`clap`]: https://crates.io/crates/clap [`dotenvy`]: https://crates.io/crates/dotenvy [`wild`]: https://crates.io/crates/wild