rtb-app
Part of the phpboyscout Rust toolkit: small, framework-free crates extracted from rust-tool-base.
A two-crate family workspace sharing one version line:
rtb-app: the application context (App), tool metadata, runtime features, and theCommandplugin trait with itsBUILTIN_COMMANDSlink-time registry. It is the structural heart of the framework, with typedArc-wrapped fields, no DI container and noBox<dyn Any>bag.rtb-test-support: the promoted test-sideAppconstructor (TestAppBuilderbehind a sealedTestWitness), consumed from[dev-dependencies]by downstream crates.
[]
= "0.9"
= "0.3" # only if you register commands
[]
= "0.9"
linkme has to be a direct dependency of any crate that registers a
command, because #[distributed_slice] expands to ::linkme::… paths.
Register a command
shows the alternative.
use ;
let features = builder.disable.build;
assert!;
assert!;
Feature and Features live in rtb_app::features, not at the crate
root. use rtb_app::prelude::*; brings both in alongside the rest of
the usual wiring types.
Documentation
https://app.rust.phpboyscout.uk
- Tutorial: from an empty crate to a registered command with passing tests.
- How-to guides:
registering commands, reporting your own version, reading typed
config, wiring self-update, building an
Appin tests. - Reference: every public type, field and default, and what happens when one is wrong.
- Explanation: why
Appis not a container, why registration is link-time, why the config is type-erased, and what this crate does not do.
Other links:
- API reference: https://docs.rs/rtb-app · https://docs.rs/rtb-test-support
- Crates: https://crates.io/crates/rtb-app · https://crates.io/crates/rtb-test-support
Development
just ci runs the full local gate (fmt, clippy, nextest, doc, deny).
Tests include a cucumber BDD suite (crates/rtb-app/tests/bdd.rs) and
trybuild compile-fail fixtures, which nextest runs isolated (see
.config/nextest.toml), so install cargo-nextest rather than relying
on the recipe's cargo test fallback. Releases are cut by colophon
from Conventional Commits; do not tag manually.
License
MIT