Abscissa is a microframework for building Rust applications (either CLI tools or network services), aiming to provide a large number of features with a minimal number of dependencies, and with a strong focus on security.
- command-line option parsing: simple declarative option parser built on top of the gumdrop crate.
- configuration: TOML configuration file parsing on application-defined configuration structures which can be dynamically updated at runtime.
- error handling: unified error-handling subsystem with generic errors.
- tracing: uses the
tracingcrate to provide async-aware application- level tracing.
- secrets management: the (optional)
secretsmodule includes a
Secrettype which derives serde's
Deserializeand can be used to represent secret values parsed from configuration files or elsewhere (e.g. credentials loaded from the environment or network requests)
- terminal interactions: support for colored terminal output (with color support autodetection). Useful for Cargo-like status messages with easy-to-use macros.
Creating a new Abscissa application
The following commands will generate an Abscissa application skeleton:
$ cargo install abscissa $ abscissa new my_cool_app
The resulting app is a Cargo project. The following files are particularly noteworthy:
src/application.rs: Abscissa application type for your app
src/commands*: application entrypoint and subcommands. Make sure to check out the
hello.rsexample of how to make a subcommand.
src/config.rs: application configuration
src/error.rs: error types
Abscissa applications are implemented as Rust libraries, but have a
src/bin subdirectory where the binary entrypoint lives. This means you
can run the following within your newly generated application:
$ cargo run -- hello world
This will invoke the
hello subcommand of your application (you'll
probably want to rename that in a real app) which will print the following:
You can also run the following to print basic help information:
$ cargo run -- --help
Command-line options are parsed using the gumdrop crate.
Please see the documentation for the
// Print a Cargo-like justified status to STDOUT status_ok!("Loaded", "app loaded successfully"); // Print an error message status_err!("something bad happened"); // Print an indented attribute to STDOUT status_attr_ok!("good", "yep"); // Print an error attribute to STDERR status_attr_err!("error", "yep");