1
Fork 0

hostmeta: Use thiserror

This commit is contained in:
Steffo 2024-11-13 07:28:11 +01:00
parent cef5e8c19b
commit c427af8186
Signed by: steffo
GPG key ID: 5ADA3868646C3FC0
2 changed files with 26 additions and 5 deletions

View file

@ -9,6 +9,7 @@ quick-xml = { version = "0.37.0", features = ["overlapped-lists", "serialize"] }
reqwest = { version = "0.12.9", features = ["json", "stream"] } reqwest = { version = "0.12.9", features = ["json", "stream"] }
serde = { version = "1.0.214", features = ["derive"] } serde = { version = "1.0.214", features = ["derive"] }
serde_json = "1.0.132" serde_json = "1.0.132"
thiserror = "2.0.3"
[dev-dependencies] [dev-dependencies]
pretty_env_logger = "0.5.0" pretty_env_logger = "0.5.0"

View file

@ -8,6 +8,7 @@
use std::collections::HashMap; use std::collections::HashMap;
use serde::Deserialize; use serde::Deserialize;
use thiserror::Error;
/// A resource descriptor object. /// A resource descriptor object.
/// ///
@ -477,19 +478,22 @@ impl ResourceDescriptor {
} }
/// Error occurred during [`ResourceDescriptor::discover`]. /// Error occurred during [`ResourceDescriptor::discover`].
#[derive(Debug)] #[derive(Debug, Error)]
pub enum ResourceDescriptorDiscoveryError { pub enum ResourceDescriptorDiscoveryError {
/// Manipulation of the provided base [`reqwest::Url`] failed. /// Manipulation of the provided base [`reqwest::Url`] failed.
/// ///
/// See [reqwest::Url::set_scheme] for possible causes. /// See [reqwest::Url::set_scheme] for possible causes.
#[error("manipulation of the provided URL failed")]
UrlManipulation(()), UrlManipulation(()),
/// All attempts of fetching a resource descriptor document failed. /// All attempts of fetching a resource descriptor document failed.
#[error("fetchign the resource descriptor document failed")]
Fetch(ResourceDescriptorDiscoveryFailures), Fetch(ResourceDescriptorDiscoveryFailures),
} }
/// Request errors occurred during [`ResourceDescriptor::discover`]. /// Request errors occurred during [`ResourceDescriptor::discover`].
#[derive(Debug)] #[derive(Debug, Error)]
#[error("all attempts of fetching the resource descriptor document failed")]
pub struct ResourceDescriptorDiscoveryFailures { pub struct ResourceDescriptorDiscoveryFailures {
/// HTTPS XRD retrieval. /// HTTPS XRD retrieval.
pub https_xrd: GetXRDError, pub https_xrd: GetXRDError,
@ -511,30 +515,46 @@ pub struct ResourceDescriptorDiscoveryFailures {
} }
/// Error occurred during [`ResourceDescriptor::get_xrd`]. /// Error occurred during [`ResourceDescriptor::get_xrd`].
#[derive(Debug)] #[derive(Debug, Error)]
pub enum GetXRDError { pub enum GetXRDError {
/// The HTTP request failed. /// The HTTP request failed.
#[error("the HTTP request failed")]
Request(reqwest::Error), Request(reqwest::Error),
/// The `Content-Type` header of the response is missing. /// The `Content-Type` header of the response is missing.
#[error("the Content-Type header of the response is missing")]
ContentTypeMissing, ContentTypeMissing,
/// The `Content-Type` header of the response is invalid. /// The `Content-Type` header of the response is invalid.
#[error("the Content-Type header of the response is invalid")]
ContentTypeInvalid, ContentTypeInvalid,
/// The document failed to be read as text.
/// The document failed to be decoded as text.
#[error("the document failed to be decoded as text")]
Decode(reqwest::Error), Decode(reqwest::Error),
/// The document failed to be parsed as XML by [`quick_xml`]. /// The document failed to be parsed as XML by [`quick_xml`].
#[error("the document failed to be parsed as XML")]
Parse(quick_xml::DeError), Parse(quick_xml::DeError),
} }
/// Error occurred during [`ResourceDescriptor::get_jrd`]. /// Error occurred during [`ResourceDescriptor::get_jrd`].
#[derive(Debug)] #[derive(Debug, Error)]
pub enum GetJRDError { pub enum GetJRDError {
/// The HTTP request failed. /// The HTTP request failed.
#[error("the HTTP request failed")]
Request(reqwest::Error), Request(reqwest::Error),
/// The `Content-Type` header of the response is missing. /// The `Content-Type` header of the response is missing.
#[error("the Content-Type header of the response is missing")]
ContentTypeMissing, ContentTypeMissing,
/// The `Content-Type` header of the response is invalid. /// The `Content-Type` header of the response is invalid.
#[error("the Content-Type header of the response is invalid")]
ContentTypeInvalid, ContentTypeInvalid,
/// The document failed to be parsed as JSON by [`reqwest`]. /// The document failed to be parsed as JSON by [`reqwest`].
#[error("the document failed to be parsed as JSON")]
Parse(reqwest::Error), Parse(reqwest::Error),
} }