Skip to main content

docker_registry_client/docker/
error.rs

1use url::Url;
2
3use crate::docker::token_cache;
4
5#[derive(Debug)]
6pub enum Error {
7    GetManifest(reqwest::Error),
8    InvalidManifestUrl(url::ParseError),
9    ExtractManifestBody(reqwest::Error),
10    FailedManifestRequest(reqwest::StatusCode, String),
11    DeserializeManifestBody(serde_json::Error, String),
12    ParseManifestAcceptHeader(reqwest::header::InvalidHeaderValue),
13    ManifestNotFound(Url),
14    MissingDockerContentDigestHeader,
15    ParseDockerContentDigestHeader(reqwest::header::ToStrError),
16
17    InvalidTokenUrl(url::ParseError),
18    GetToken(reqwest::Error),
19    ExtractTokenBody(reqwest::Error),
20    DeserializeToken(serde_json::Error, String),
21    ParseAuthorizationHeader(reqwest::header::InvalidHeaderValue),
22    InvalidImageUrl(crate::image::FromUrlError),
23    FetchToken(token_cache::FetchError),
24    StoreToken(token_cache::StoreError),
25}
26
27impl std::fmt::Display for Error {
28    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
29        match self {
30            Self::GetManifest(e) => write!(f, "Failed to get manifest: {e}"),
31            Self::InvalidManifestUrl(e) => write!(f, "Invalid manifest URL: {e}"),
32            Self::ExtractManifestBody(e) => write!(f, "Failed to extract manifest body: {e}"),
33            Self::FailedManifestRequest(e, s) => {
34                write!(f, "Failed manifest request: status: {e}, body: {s}")
35            }
36            Self::DeserializeManifestBody(e, s) => {
37                write!(f, "Failed to deserialize manifest body: {e}, body: {s}")
38            }
39            Self::ParseManifestAcceptHeader(e) => {
40                write!(f, "Failed to parse manifest accept header: {e}")
41            }
42            Self::ManifestNotFound(u) => write!(f, "Manifest at url {u} was not found"),
43            Self::MissingDockerContentDigestHeader => {
44                write!(f, "Missing Docker content digest header")
45            }
46            Self::ParseDockerContentDigestHeader(e) => {
47                write!(f, "Failed to parse Docker content digest header: {e}")
48            }
49
50            Self::InvalidTokenUrl(e) => write!(f, "Invalid token URL: {e}"),
51            Self::GetToken(e) => write!(f, "Failed to get token: {e}"),
52            Self::ExtractTokenBody(e) => write!(f, "Failed to extract token body: {e}"),
53            Self::DeserializeToken(e, s) => {
54                write!(f, "Failed to deserialize token: {e}, body: {s}")
55            }
56            Self::ParseAuthorizationHeader(e) => {
57                write!(f, "Failed to parse authorization header: {e}")
58            }
59            Self::InvalidImageUrl(e) => {
60                write!(f, "Failed to parse image from url: {e}")
61            }
62            Self::FetchToken(e) => write!(f, "Failed to fetch token from cache: {e}"),
63            Self::StoreToken(e) => write!(f, "Failed to store token in cache: {e}"),
64        }
65    }
66}
67
68impl std::error::Error for Error {}