Skip to main content

systemprompt_agent/
error.rs

1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum RowParseError {
5    #[error("Missing required field: {field}")]
6    MissingField { field: String },
7
8    #[error("Invalid datetime for field '{field}'")]
9    InvalidDatetime { field: String },
10
11    #[error("JSON parse error for field '{field}': {source}")]
12    JsonParse {
13        field: String,
14        #[source]
15        source: serde_json::Error,
16    },
17}
18
19#[derive(Debug, Error)]
20pub enum TaskError {
21    #[error("Task UUID missing from database row")]
22    MissingTaskUuid,
23
24    #[error("Agent name not found for task {task_id}")]
25    MissingAgentName { task_id: String },
26
27    #[error("Context ID missing from database row")]
28    MissingContextId,
29
30    #[error("Invalid task state: {state}")]
31    InvalidTaskState { state: String },
32
33    #[error(transparent)]
34    RowParse(#[from] RowParseError),
35
36    #[error("Metadata parse error: {0}")]
37    InvalidMetadata(#[from] serde_json::Error),
38
39    #[error("Empty task ID provided")]
40    EmptyTaskId,
41
42    #[error("Invalid task ID format: {id}")]
43    InvalidTaskIdFormat { id: String },
44
45    #[error("Message ID missing from database row")]
46    MissingMessageId,
47
48    #[error("Tool name missing for tool execution")]
49    MissingToolName,
50
51    #[error("Tool call ID missing for tool execution")]
52    MissingCallId,
53
54    #[error("Created timestamp missing from database")]
55    MissingCreatedTimestamp,
56
57    #[error("Database error: {0}")]
58    Database(String),
59}
60
61#[derive(Debug, Error)]
62pub enum ContextError {
63    #[error("Context UUID missing from database row")]
64    MissingUuid,
65
66    #[error("Context name missing from database row")]
67    MissingName,
68
69    #[error("User ID missing from database row")]
70    MissingUserId,
71
72    #[error(transparent)]
73    RowParse(#[from] RowParseError),
74
75    #[error("Role serialization error: {0}")]
76    RoleSerialization(#[from] serde_json::Error),
77
78    #[error("Database error: {0}")]
79    Database(String),
80}
81
82#[derive(Debug, Error)]
83pub enum ArtifactError {
84    #[error("Artifact UUID missing from database row")]
85    MissingUuid,
86
87    #[error("Artifact type missing from database row")]
88    MissingType,
89
90    #[error("Context ID missing for artifact")]
91    MissingContextId,
92
93    #[error(transparent)]
94    RowParse(#[from] RowParseError),
95
96    #[error("Invalid tool response schema: expected {expected}, found keys: {actual_keys:?}")]
97    InvalidSchema {
98        expected: &'static str,
99        actual_keys: Vec<String>,
100        #[source]
101        source: serde_json::Error,
102    },
103
104    #[error("Metadata parse error: {0}")]
105    InvalidMetadata(#[from] serde_json::Error),
106
107    #[error("Database error: {0}")]
108    Database(String),
109
110    #[error("Transform error: {0}")]
111    Transform(String),
112
113    #[error("Metadata validation error: {0}")]
114    MetadataValidation(String),
115}
116
117#[derive(Debug, Error)]
118pub enum ProtocolError {
119    #[error("Tool name missing in tool call")]
120    MissingToolName,
121
122    #[error("Tool result error flag is required but was not provided")]
123    MissingErrorFlag,
124
125    #[error("Message ID missing")]
126    MissingMessageId,
127
128    #[error("Request ID missing")]
129    MissingRequestId,
130
131    #[error("Latency value missing or invalid")]
132    InvalidLatency,
133
134    #[error("Validation failed: {0}")]
135    ValidationFailed(String),
136
137    #[error("JSON parse error: {0}")]
138    JsonParse(#[from] serde_json::Error),
139
140    #[error("Database error: {0}")]
141    Database(String),
142}
143
144#[derive(Debug, Error)]
145pub enum AgentError {
146    #[error("Task error: {0}")]
147    Task(#[from] TaskError),
148
149    #[error("Context error: {0}")]
150    Context(#[from] ContextError),
151
152    #[error("Artifact error: {0}")]
153    Artifact(#[from] ArtifactError),
154
155    #[error("A2A protocol error: {0}")]
156    Protocol(#[from] ProtocolError),
157
158    #[error("Repository error: {0}")]
159    Repository(String),
160
161    #[error("Database error: {0}")]
162    Database(String),
163}