pub struct SystemPlugin { /* private fields */ }Expand description
Built-in plugin providing standard system commands.
Supplies ready-made handlers for the commands that every dynamic-cli
application typically needs. Users declare the corresponding commands in
their YAML config and register the plugin once — no manual handler wiring.
§Provided handlers
| Implementation name | Behaviour |
|---|---|
system_help | Prints application or per-command help via the active HelpFormatter |
system_version | Prints the version from metadata.version in the config |
system_exit | Runs the shutdown callback then exits (default: std::process::exit(0)) |
§Shutdown callback
system_exit accepts an optional callback via SystemPlugin::with_exit_fn.
The callback runs before the process exits, allowing the application to
flush buffers, close connections, save state, or log a goodbye message.
The default callback calls std::process::exit(0) directly. Provide a
custom one when a clean shutdown sequence is required:
use dynamic_cli::plugin::SystemPlugin;
let plugin = SystemPlugin::new()
.with_exit_fn(|| {
// flush logs, close DB connections, save session…
eprintln!("Goodbye.");
std::process::exit(0);
});§YAML config
Declare the commands you want to activate:
commands:
- name: help
implementation: system_help
description: "Show help"
aliases: ["h", "?"]
required: false
arguments: []
options: []
- name: version
implementation: system_version
description: "Show version"
required: false
arguments: []
options: []
- name: exit
implementation: system_exit
description: "Exit the application"
aliases: ["quit", "q"]
required: false
arguments: []
options: []§Example
use dynamic_cli::plugin::{Plugin, SystemPlugin};
let plugin = SystemPlugin::new();
assert_eq!(plugin.name(), "system");
let handlers = plugin.handlers();
let names: Vec<&str> = handlers.iter().map(|(n, _)| n.as_str()).collect();
assert!(names.contains(&"system_help"));
assert!(names.contains(&"system_version"));
assert!(names.contains(&"system_exit"));Implementations§
Source§impl SystemPlugin
impl SystemPlugin
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new SystemPlugin with the default shutdown behaviour.
The default exit callback calls std::process::exit(0). Use
with_exit_fn to supply a custom shutdown
sequence.
§Example
use dynamic_cli::plugin::{Plugin, SystemPlugin};
let plugin = SystemPlugin::new();
assert_eq!(plugin.name(), "system");Sourcepub fn with_config(self, config: CommandsConfig) -> Self
pub fn with_config(self, config: CommandsConfig) -> Self
Attach a config so the system handlers can access app metadata.
Called automatically by [CliBuilder::build()] when the plugin is
registered via [CliBuilder::register_plugin].
§Example
use dynamic_cli::plugin::{Plugin, SystemPlugin};
use dynamic_cli::config::schema::{CommandsConfig, Metadata};
let config = CommandsConfig {
metadata: Metadata {
version: "1.0.0".to_string(),
prompt: "myapp".to_string(),
prompt_suffix: " > ".to_string(),
},
commands: vec![],
global_options: vec![],
};
let plugin = SystemPlugin::new().with_config(config);
assert_eq!(plugin.name(), "system");Sourcepub fn with_exit_fn<F>(self, f: F) -> Self
pub fn with_exit_fn<F>(self, f: F) -> Self
Supply a custom shutdown callback for system_exit.
The callback is invoked when the user runs the command bound to
system_exit. Use it to flush buffers, close connections, persist
state, or display a goodbye message before the process terminates.
The callback must be Fn() + Send + Sync + 'static.
§Example
use dynamic_cli::plugin::SystemPlugin;
let plugin = SystemPlugin::new()
.with_exit_fn(|| {
eprintln!("Saving session…");
// close resources here
std::process::exit(0);
});Trait Implementations§
Source§impl Default for SystemPlugin
impl Default for SystemPlugin
Source§impl Plugin for SystemPlugin
impl Plugin for SystemPlugin
Source§fn description(&self) -> &str
fn description(&self) -> &str
Auto Trait Implementations§
impl !RefUnwindSafe for SystemPlugin
impl !UnwindSafe for SystemPlugin
impl Freeze for SystemPlugin
impl Send for SystemPlugin
impl Sync for SystemPlugin
impl Unpin for SystemPlugin
impl UnsafeUnpin for SystemPlugin
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more