1use pyo3::exceptions::PyRuntimeError;
2use pyo3::pyclass::PyClassGuardError;
3use pyo3::PyErr;
4use thiserror::Error;
5#[derive(Error, Debug)]
6pub enum ClientError {
7 #[error(transparent)]
8 HeaderError(#[from] reqwest::header::InvalidHeaderValue),
9
10 #[error(transparent)]
11 ReqwestError(#[from] reqwest::Error),
12
13 #[error("Unauthorized")]
14 Unauthorized,
15
16 #[error("Failed to update auth token")]
17 UpdateAuthTokenError,
18
19 #[error("Failed to insert profile")]
20 InsertProfileError,
21
22 #[error("Failed to update profile")]
23 UpdateProfileError,
24
25 #[error("Failed to get drift alerts")]
26 GetDriftAlertError,
27
28 #[error("Failed to get drift profile")]
29 GetDriftProfileError,
30
31 #[error(transparent)]
32 SerdeQsError(#[from] serde_qs::Error),
33
34 #[error(transparent)]
35 SerdeJsonError(#[from] serde_json::Error),
36
37 #[error("Invalid config type. Expected HttpConfig")]
38 InvalidConfigTypeError,
39
40 #[error("Failed to get drift data")]
41 GetDriftDataError,
42
43 #[error("{0}")]
44 PyError(String),
45
46 #[error(transparent)]
47 UtilError(#[from] scouter_types::error::UtilError),
48
49 #[error("Failed to parse JWT token from response: {0}")]
50 ParseJwtTokenError(String),
51
52 #[error("Failed to get paginated traces")]
53 GetPaginatedTracesError,
54
55 #[error("Failed to refresh trace summary")]
56 RefreshTraceSummaryError,
57
58 #[error("Failed to get trace spans")]
59 GetTraceSpansError,
60
61 #[error("Failed to get trace metrics")]
62 GetTraceMetricsError,
63
64 #[error("Failed to get trace baggage")]
65 GetTraceBaggageError,
66
67 #[error("Failed to get tags")]
68 GetTagsError,
69
70 #[error("Invalid drift type for GenAI task request")]
71 InvalidDriftTypeForGenAITask,
72}
73
74impl From<ClientError> for PyErr {
75 fn from(err: ClientError) -> PyErr {
76 let msg = err.to_string();
77 PyRuntimeError::new_err(msg)
78 }
79}
80
81impl From<PyErr> for ClientError {
82 fn from(err: PyErr) -> ClientError {
83 ClientError::PyError(err.to_string())
84 }
85}
86
87impl<'a, 'py> From<PyClassGuardError<'a, 'py>> for ClientError {
88 fn from(err: PyClassGuardError<'a, 'py>) -> Self {
89 ClientError::PyError(err.to_string())
90 }
91}