Skip to main content

scouter_http/
error.rs

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}