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. The structural heart of the framework: typedArc-wrapped fields, no DI container, noBox<dyn Any>bag.rtb-test-support— the promoted test-sideAppconstructor (TestAppBuilderbehind a sealedTestWitness), consumed from[dev-dependencies]by downstream crates.
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 (run isolated — see
.config/nextest.toml; nextest is required). Releases are cut by
release-plz from Conventional Commits — do not tag manually.
License
MIT