ao_core/
parity_session_strategy.rs1use serde::{Deserialize, Serialize};
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
16#[serde(rename_all = "kebab-case")]
17pub enum OrchestratorSessionStrategy {
18 Reuse,
19 Delete,
20 Ignore,
21 DeleteNew,
22 IgnoreNew,
23 KillPrevious,
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
27#[serde(rename_all = "kebab-case")]
28pub enum OpencodeIssueSessionStrategy {
29 Reuse,
30 Delete,
31 Ignore,
32}
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq)]
35pub enum ExistingSessionAction {
36 ReuseExisting,
37 DeleteExistingAndReuseName,
38 IgnoreExistingAndSpawnNew,
39 Abort,
40}
41
42pub fn decide_existing_session_action(
47 strategy: OrchestratorSessionStrategy,
48 existing_found: bool,
49) -> ExistingSessionAction {
50 if !existing_found {
51 return ExistingSessionAction::IgnoreExistingAndSpawnNew;
52 }
53 match strategy {
54 OrchestratorSessionStrategy::Reuse => ExistingSessionAction::ReuseExisting,
55 OrchestratorSessionStrategy::Delete => ExistingSessionAction::DeleteExistingAndReuseName,
56 OrchestratorSessionStrategy::Ignore => ExistingSessionAction::Abort,
57 OrchestratorSessionStrategy::DeleteNew => ExistingSessionAction::Abort,
58 OrchestratorSessionStrategy::IgnoreNew => ExistingSessionAction::Abort,
59 OrchestratorSessionStrategy::KillPrevious => {
60 ExistingSessionAction::DeleteExistingAndReuseName
61 }
62 }
63}