1use thiserror::Error;
2
3use crate::model::Phase;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum UnknownKeyPolicy {
7 Error,
8 Skip,
9}
10
11#[derive(Debug, Error, Clone, PartialEq, Eq)]
12pub enum StateError {
13 #[error("revision conflict: expected {expected}, actual {actual}")]
14 RevisionConflict { expected: u64, actual: u64 },
15 #[error("patch base revision mismatch: {left} vs {right}")]
16 MutationBaseRevisionMismatch { left: u64, right: u64 },
17 #[error("plugin already installed: {name}")]
18 PluginAlreadyInstalled { name: String },
19 #[error("plugin not installed: {type_name}")]
20 PluginNotInstalled { type_name: &'static str },
21 #[error("key already registered: {key}")]
22 KeyAlreadyRegistered { key: String },
23 #[error("unknown key: {key}")]
24 UnknownKey { key: String },
25 #[error("failed to decode key {key}: {message}")]
26 KeyDecode { key: String, message: String },
27 #[error("failed to encode key {key}: {message}")]
28 KeyEncode { key: String, message: String },
29 #[error("scheduled action handler already registered: {key}")]
30 HandlerAlreadyRegistered { key: String },
31 #[error("effect handler already registered: {key}")]
32 EffectHandlerAlreadyRegistered { key: String },
33 #[error("phase {phase:?} did not converge after {max_rounds} rounds")]
34 PhaseRunLoopExceeded { phase: Phase, max_rounds: usize },
35 #[error("no scheduled action handler registered for {key}")]
36 UnknownScheduledActionHandler { key: String },
37 #[error("no effect handler registered for {key}")]
38 UnknownEffectHandler { key: String },
39 #[error("parallel merge conflict on exclusive key: {key}")]
40 ParallelMergeConflict { key: String },
41 #[error("tool already registered: {tool_id}")]
42 ToolAlreadyRegistered { tool_id: String },
43 #[error("operation cancelled")]
44 Cancelled,
45}