agentmux_cef\reducer/
quit.rs

1// Copyright 2026, AgentMux Corp.
2// SPDX-License-Identifier: Apache-2.0
3
4//! Quit lifecycle (Phase H.5) reducer handlers. Extracted from reducer/mod.rs in
5//! task #182 PR-F-2 for navigability.
6
7
8use crate::state::*;
9
10use super::{DispatchOutput, HostEvent, HostState};
11
12// ── H.5 — quit lifecycle ─────────────────────────────────────────────────
13
14pub(super) fn handle_begin_drain(state: &mut HostState, reason: QuitReason) -> DispatchOutput {
15    if state.quit_state != QuitState::Running {
16        return DispatchOutput::default(); // already draining or quit; idempotent
17    }
18    state.quit_state = QuitState::Draining { reason: reason.clone() };
19    let v = state.bump_version();
20    DispatchOutput {
21        events: vec![HostEvent::QuitDraining { reason, version: v }],
22        ..Default::default()
23    }
24}
25
26pub(super) fn handle_confirm_drained(state: &mut HostState) -> DispatchOutput {
27    if !matches!(state.quit_state, QuitState::Draining { .. }) {
28        return DispatchOutput::default(); // not draining; idempotent
29    }
30    state.quit_state = QuitState::Quit;
31    let v = state.bump_version();
32    DispatchOutput {
33        events: vec![HostEvent::QuitReady { version: v }],
34        ..Default::default()
35    }
36}
37