flams_ontology/uris/
errors.rs1use 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}