lattice_ai/opencode/
modes.rs1use lattice_mode::registry::ModeRegistry;
12use lattice_mode::{ActivationPolicy, LifecycleFuture, Mode, ModeContext, ModeId, ModeKind};
13
14pub struct OpencodeMode;
16
17impl OpencodeMode {
18 pub fn mode_id() -> ModeId {
20 ModeId::new("opencode-mode")
21 }
22}
23
24impl Mode for OpencodeMode {
25 type Guard = ();
26
27 fn id(&self) -> ModeId {
28 Self::mode_id()
29 }
30
31 fn kind(&self) -> ModeKind {
32 ModeKind::Minor
33 }
34
35 fn activation_policy(&self) -> ActivationPolicy {
37 ActivationPolicy::Manual
38 }
39
40 fn on_activate(&self, _ctx: ModeContext) -> LifecycleFuture<'_, ()> {
41 Box::pin(async { Ok(()) })
42 }
43}
44
45pub fn register_opencode_modes(registry: &mut ModeRegistry) {
48 registry
49 .register(OpencodeMode)
50 .expect("opencode-mode register");
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn id_kind_and_policy() {
59 assert_eq!(OpencodeMode::mode_id().as_str(), "opencode-mode");
60 assert_eq!(OpencodeMode.kind(), ModeKind::Minor);
61 assert_eq!(OpencodeMode.activation_policy(), ActivationPolicy::Manual);
62 }
63
64 #[test]
65 fn registers_without_conflict() {
66 let mut registry = ModeRegistry::new();
67 register_opencode_modes(&mut registry);
68 assert!(registry.is_registered(OpencodeMode::mode_id()));
69 }
70}