Expand description
§CLI Batteries
Opinionated batteries-included command line interface runtime utilities.
To use it, add it to your Cargo.toml
[dependencies]
cli-batteries = "0.1"
[build-dependencies]
cli-batteries = "0.1"and call the build_rs function in your build.rs
ⓘ
fn main() {
cli_batteries::build_rs().unwrap()
}Then in your src/main.rs you define app specific command line arguments using clap::Parser and run the app as follows
ⓘ
use cli_batteries::{version, Parser};
use std::{path::PathBuf, io::Result};
use tokio::fs::File;
#[derive(Parser)]
#[group(skip)]
struct Options {
/// File to read
#[clap(long, env, default_value = "Readme.md")]
file: PathBuf,
}
async fn app(options: Options) -> Result<()> {
let mut file = File::open(options.file).await?;
Ok(())
}
fn main() {
cli_batteries::run(version!(), app);
}You can see this working in the example project.
§Features
signals: Handle Ctrl-C, SIGINT and SIGTERM with gracefull shutdown.mimalloc: Use the mimalloc allocator with security hardening features enabled.rand: Log and configure random seeds.rayon: Log and configure number of threads.prometheus: Start a Prometheus metrics server.metered-allocator: Collect metric on memory allocation, enablesprometheus.mock-shutdown: Enable thereset_shutdownfunction that allows re-arming shutdown for testing.tokio-console: Enable the--tokio-consoleoption to start a Tokio console server onhttp://127.0.0.1:6669/for async inspection.otlp: Enable the--trace-otlpoption to push traces to an OpenTelementry collector.
§Building and testing
Format, lint, build and test everything (I recommend creating a shell alias for this):
cargo fmt &&\
cargo clippy --all-features --all-targets &&\
cargo test --workspace --all-features --doc -- --nocapture &&\
cargo test --workspace --all-features --all-targets -- --nocapture &&\
cargo doc --workspace --all-features --no-depsCheck documentation coverage
RUSTDOCFLAGS="-Z unstable-options --show-coverage" cargo doc --workspace --all-features --no-deps§To do
Goals:
Maybe:
Macros§
- default_
from_ clap - Implement
Defaultfor a type that implementsParserand has default values set for all fields. - version
Structs§
Functions§
- await_
shutdown - Wait for the program to shutdown.
- build_
rs - Set some compile-time environment variables.
- heartbeat
- is_
shutting_ down - Are we currently shutting down?
- run
- Run the program.
- shutdown
- Send the signal to shutdown the program.