use serde::Deserialize;
use serde_json::from_str;
use thiserror::Error;
pub mod r#async;
pub mod blocking;
#[derive(Error, Debug)]
pub enum ClientError {
#[error("Reqwest error")]
ReqwestError(#[from] reqwest::Error),
#[error("URL parse error")]
UrlError(#[from] url::ParseError),
#[error("Field type conflict")]
FieldTypeConflict,
#[error("Database not found")]
DatabaseNotFound,
#[error("Unknown error")]
Unknown,
}
fn parse_error(text: &str) -> ClientError {
let response: Result<Response, _> = from_str(text);
match response {
Ok(response) => {
if response.error.starts_with("field type conflict") {
ClientError::FieldTypeConflict
} else if response.error.starts_with("database not found") {
ClientError::DatabaseNotFound
} else {
ClientError::Unknown
}
}
Err(_) => ClientError::Unknown,
}
}
#[derive(Debug, Deserialize)]
struct Response {
error: String,
}