use std::time::Duration;
use reqwest::StatusCode;
use thiserror::Error;
use crate::message::ApiMessage;
#[derive(Debug, Error)]
pub enum SdkError {
#[error(transparent)]
Http(#[from] reqwest::Error),
#[error(transparent)]
Json(#[from] serde_json::Error),
#[error(transparent)]
QueryEncode(#[from] serde_urlencoded::ser::Error),
#[error("HTTP {status}: {messages:?}")]
Api {
status: StatusCode,
messages: Vec<ApiMessage>,
},
#[error("rate limited (429 Too Many Requests)")]
RateLimited {
retry_after: Option<Duration>,
},
#[error("not acceptable (406): invalid Accept MIME or version")]
NotAcceptable { body_snippet: String },
#[error("gone (410): requested resource version expired")]
Gone { body_snippet: String },
#[error("unauthorized (401)")]
Unauthorized,
#[error("unexpected HTTP {status}: {body_snippet}")]
UnexpectedResponse {
status: StatusCode,
body_snippet: String,
},
#[error("invalid URL: {0}")]
InvalidUrl(#[from] url::ParseError),
}