turbopuffer_client/
error.rs

1use serde_json::Value;
2use thiserror::Error;
3
4#[derive(Clone, Debug, Error)]
5pub enum Error {
6  #[error("Request Error: {0}")]
7  RequestError(String),
8
9  #[error("Recieved non JSON Response")]
10  NonJsonResponse(String),
11
12  /// When trying to parse the JSON response into a well-formed struct there
13  /// was an error. The raw JSON value that was the response is stored in
14  /// this error.
15  #[error("Invalid Response")]
16  InvalidResponse(Value),
17}
18
19impl From<reqwest::Error> for Error {
20  fn from(value: reqwest::Error) -> Self {
21    Error::RequestError(value.to_string())
22  }
23}
24
25pub(crate) fn request_error(err: reqwest::Error) -> Error {
26  tracing::error!("[request_error] {}", err);
27  Error::RequestError(err.to_string())
28}
29
30pub(crate) fn non_json(err: serde_json::Error, body: String) -> Error {
31  tracing::error!("[non_json] {}", err);
32  tracing::error!("[non_json(body)] {}", body);
33  Error::NonJsonResponse(body)
34}
35
36pub(crate) fn invalid_response(
37  err: serde_json::Error,
38  fallback: serde_json::Value,
39) -> Error {
40  tracing::error!("[invalid_response] {}", err);
41  tracing::error!("[invalid_response(fallback)] {}", fallback);
42  Error::InvalidResponse(fallback)
43}