aboutsummaryrefslogtreecommitdiff
path: root/mingling/src/setups/confirm.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-15 20:21:45 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-15 20:21:45 +0800
commit20dd9f182ec842a267fc48c72578c6169c121ccb (patch)
tree57ff1690078f295581f3c54c3b0093048b1b5c42 /mingling/src/setups/confirm.rs
parent046ac064b6f4790f9053ad1e6109843bb38f89dd (diff)
refactor: rename Confirmer to ResConfirm and OSC94 to ResOSC94
Rename `Confirmer` resource to `ResConfirm`, `ConfirmerCount` to `ConfirmCount`, and `ConfirmerPredicate` to `ConfirmPredicate`. Update related setups, guards, and documentation references.
Diffstat (limited to 'mingling/src/setups/confirm.rs')
-rw-r--r--mingling/src/setups/confirm.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/mingling/src/setups/confirm.rs b/mingling/src/setups/confirm.rs
new file mode 100644
index 0000000..6635420
--- /dev/null
+++ b/mingling/src/setups/confirm.rs
@@ -0,0 +1,60 @@
+use mingling_core::{
+ Program, ProgramCollect, config, hook::ProgramHook, setup::ProgramSetup, this,
+};
+
+use crate::res::ResConfirm;
+
+/// Confirm setup for managing confirmation state
+///
+/// This Setup manages the confirmation flag within the program's resource
+/// store. It registers a [`ResConfirm`] resource and sets up a hook that
+/// checks the user's confirmation mode during program execution.
+///
+/// # Usage
+///
+/// This Setup can be registered using the
+/// [`Program`](https://docs.rs/mingling/latest/mingling/struct.Program.html)
+/// `with_setup` method, for example:
+///
+/// ```rust
+/// # use mingling::MockProgramCollect as ThisProgram;
+/// use mingling::Program;
+/// use mingling::setup::ConfirmSetup;
+///
+/// let mut program = Program::<ThisProgram>::new();
+/// program.with_setup(ConfirmSetup);
+/// ```
+///
+/// # Behavior
+///
+/// - Registers a [`ResConfirm`] resource that tracks confirmation state.
+/// - At the beginning of command execution, checks whether the user's
+/// confirmation mode is set to `Skip`.
+/// - If confirmation is skipped, the [`Confirm`] resource is updated
+/// to record the confirmed state.
+///
+/// # Notes
+///
+/// - This Setup applies uniformly to all subcommands of the entire program.
+/// - The confirmation state is determined by the global `config` setting;
+/// it does not support per-command overrides.
+pub struct ConfirmSetup;
+
+impl<C> ProgramSetup<C> for ConfirmSetup
+where
+ C: ProgramCollect<Enum = C> + 'static,
+{
+ fn setup(self, program: &mut Program<C>) {
+ program.with_resource(ResConfirm::new());
+
+ program.with_hook(ProgramHook::empty().on_pre_dispatch::<_, ()>(|_| {
+ let p = this::<C>();
+ let confirmed = p.user_context.confirmation == config::ConfirmationMode::Skip;
+ if confirmed {
+ p.modify_res(|c: &mut ResConfirm| {
+ c.set_confirmed();
+ });
+ }
+ }));
+ }
+}