Skip to main content

gov_uk_sdk_core/
error.rs

1use std::time::Duration;
2
3use reqwest::StatusCode;
4use thiserror::Error;
5
6use crate::message::ApiMessage;
7
8#[derive(Debug, Error)]
9pub enum SdkError {
10    #[error(transparent)]
11    Http(#[from] reqwest::Error),
12
13    #[error(transparent)]
14    Json(#[from] serde_json::Error),
15
16    #[error(transparent)]
17    QueryEncode(#[from] serde_urlencoded::ser::Error),
18
19    #[error("HTTP {status}: {messages:?}")]
20    Api {
21        status: StatusCode,
22        messages: Vec<ApiMessage>,
23    },
24
25    /// HTTP 429. Check [`SdkError::RateLimited::retry_after`] when present (from `Retry-After`).
26    #[error("rate limited (429 Too Many Requests)")]
27    RateLimited {
28        retry_after: Option<Duration>,
29    },
30
31    #[error("not acceptable (406): invalid Accept MIME or version")]
32    NotAcceptable { body_snippet: String },
33
34    #[error("gone (410): requested resource version expired")]
35    Gone { body_snippet: String },
36
37    #[error("unauthorized (401)")]
38    Unauthorized,
39
40    #[error("unexpected HTTP {status}: {body_snippet}")]
41    UnexpectedResponse {
42        status: StatusCode,
43        body_snippet: String,
44    },
45
46    #[error("invalid URL: {0}")]
47    InvalidUrl(#[from] url::ParseError),
48}