feat(effect): add changes_mode method to Effect trait and use it in ExecuteCommand

Add a `changes_mode` method to the `Effect` trait with a default implementation
returning `false` . Implement this method for the `ChangeMode` effect to return
`true` . Update the command execution logic to use `e.changes_mode()` instead of
string matching on formatted output. Adjust the corresponding test to assert the
presence of a mode‑changing effect directly via the new method, removing the
temporary debug string.

This change introduces a clear, typed way to detect mode‑changing effects,
improving readability and reducing reliance on string inspection.

Co-Authored-By: fiddlerwoaroof/git-smart-commit (bartowski/nvidia_Nemotron-Cascade-2-30B-A3B-GGUF)
This commit is contained in:
Edward Langley
2026-04-07 00:48:22 -07:00
parent 8f3a54bb38
commit de047ddf1a
2 changed files with 10 additions and 4 deletions

View File

@ -10,6 +10,10 @@ use super::app::{App, AppMode};
/// Effects know how to apply themselves to the App.
pub trait Effect: Debug {
fn apply(&self, app: &mut App);
/// Whether this effect changes the app mode.
fn changes_mode(&self) -> bool {
false
}
}
// ── Model mutations ──────────────────────────────────────────────────────────
@ -328,6 +332,9 @@ impl Effect for ChangeMode {
fn apply(&self, app: &mut App) {
app.mode = self.0.clone();
}
fn changes_mode(&self) -> bool {
true
}
}
#[derive(Debug)]