flams_ontology/uris/
errors.rs

1use std::error::Error;
2use std::fmt::Display;
3
4use super::name::InvalidURICharacter;
5
6#[derive(Debug)]
7pub enum URIParseError {
8    TooManyPartsFor {
9        uri_kind: &'static str,
10        original: String,
11    },
12    InvalidLanguage {
13        uri_kind: &'static str,
14        original: String,
15    },
16    MissingPartFor {
17        uri_kind: &'static str,
18        part: &'static str,
19        original: String,
20    },
21    UnrecognizedPart {
22        original: String,
23    },
24    URLParseError(url::ParseError),
25    InvalidCharacter(InvalidURICharacter)
26}
27impl From<InvalidURICharacter> for URIParseError {
28    #[inline]
29    fn from(e: InvalidURICharacter) -> Self {
30        Self::InvalidCharacter(e)
31    }
32}
33impl From<url::ParseError> for URIParseError {
34    #[inline]
35    fn from(e: url::ParseError) -> Self {
36        Self::URLParseError(e)
37    }
38}
39impl Display for URIParseError {
40    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
41        match self {
42            Self::TooManyPartsFor { uri_kind, original } => {
43                write!(f, "too many parts for {uri_kind}: {original}")
44            }
45            Self::MissingPartFor {
46                uri_kind,
47                part,
48                original,
49            } => {
50                write!(
51                    f,
52                    "missing query fragment ({part}) for {uri_kind}: {original}"
53                )
54            }
55            Self::InvalidLanguage { uri_kind, original } => {
56                write!(f, "invalid language for {uri_kind}: {original}")
57            }
58            Self::UnrecognizedPart { original } => {
59                write!(f, "unrecognized query fragment in uri: {original}")
60            }
61            Self::URLParseError(_) => {
62                write!(f, "invalid URL")
63            }
64            Self::InvalidCharacter(e) => {
65                Display::fmt(e, f)
66            }
67        }
68    }
69}
70impl Error for URIParseError {
71    fn source(&self) -> Option<&(dyn Error + 'static)> {
72        match self {
73            Self::URLParseError(e) => Some(e),
74            _ => None,
75        }
76    }
77}