vcard4/
error.rs

1use thiserror::Error;
2
3/// Error lexing a vcard string.
4#[derive(Debug, Error, PartialEq, Clone, Default)]
5#[doc(hidden)]
6pub enum LexError {
7    /// Generic lex error.
8    #[default]
9    #[error("vcard lex error")]
10    Other,
11}
12
13/// Errors generated by the vCard library.
14#[derive(Debug, Error)]
15pub enum Error {
16    /// Error generated when a token was expected but no more tokens
17    /// are available; end-of-file (EOF) was reached.
18    #[error("input token was expected but reached EOF")]
19    TokenExpected,
20
21    /// Error generated when a version is encountered that is not
22    /// the first property.
23    #[error("version must be the first property")]
24    VersionMisplaced,
25
26    /// Error generated when a control character is encountered.
27    #[error("control characters are not allowed, got '{0}'")]
28    ControlCharacter(String),
29
30    /// Error generated when an expected token is of the wrong type.
31    #[error("input token '{0}' was incorrect")]
32    IncorrectToken(String),
33
34    /// Error generated when an unknown parameter is encountered.
35    #[error("unknown parameter '{0}'")]
36    UnknownParameter(String),
37
38    /// Error generated when an unknown property name is encountered.
39    #[error("property name '{0}' is not supported")]
40    UnknownPropertyName(String),
41
42    /// Error generated when a property value is invalid.
43    #[error("property value is invalid")]
44    InvalidPropertyValue,
45
46    /// Error generated when a time is invalid.
47    #[error("time '{0}' is invalid")]
48    InvalidTime(String),
49
50    /// Error generated when a date is invalid.
51    #[error("date '{0}' is invalid")]
52    InvalidDate(String),
53
54    /// Error generated when a delivery address (`ADR`) is invalid.
55    #[error("delivery address '{0}' is invalid")]
56    InvalidAddress(String),
57
58    /// Error generated when a LABEL parameter is specified on a property
59    /// other than ADR.
60    #[error("parameter LABEL can only be applied to ADR but used on '{0}'")]
61    InvalidLabel(String),
62
63    /// Error generated when a boolean is invalid.
64    #[error("value '{0}' is not a valid boolean")]
65    InvalidBoolean(String),
66
67    /// Error generated when a CLIENTPIDMAP value could not be parsed.
68    #[error("client PID map '{0}' is not valid")]
69    InvalidClientPidMap(String),
70
71    /// Error generated when a property or parameter delimiter was expected.
72    #[error("property or parameter delimiter expected")]
73    DelimiterExpected,
74
75    /// Error generated when a value type is not supported.
76    #[error("value type '{0}' is not supported")]
77    UnknownValueType(String),
78
79    /// Error generated when a TYPE for a RELATED property is not supported.
80    #[error("related type value '{0}' is not supported")]
81    UnknownRelatedType(String),
82
83    /// Error generated when a TYPE for a TEL property is not supported.
84    #[error("telephone type value '{0}' is not supported")]
85    UnknownTelephoneType(String),
86
87    /// Error generated when a VALUE for a property is not supported.
88    #[error("value '{0}' is not supported in this context '{1}'")]
89    UnsupportedValueType(String, String),
90
91    /// Error generated when a KIND is not supported.
92    #[error("kind '{0}' is not supported")]
93    UnknownKind(String),
94
95    /// Error generated when the sex of a GENDER is not supported.
96    #[error("sex '{0}' is not supported")]
97    UnknownSex(String),
98
99    /// Error generated when a GENDER does not specify the sex.
100    #[error("gender value is missing sex")]
101    NoSex,
102
103    /// Error generated when a property appears more than once.
104    #[error("property '{0}' may only appear exactly once")]
105    OnlyOnce(String),
106
107    /// Error generated when the FN property is not specified.
108    #[error("formatted name (FN) is required")]
109    NoFormattedName,
110
111    /// Error generated when a date time is not valid.
112    #[error("date time '{0}' is not valid, maybe missing 'T' delimiter")]
113    InvalidDateTime(String),
114
115    /// Error generated when a TYPE parameter is given for a property
116    /// that does not support it.
117    #[error("TYPE parameter is not supported for property '{0}'")]
118    TypeParameter(String),
119
120    /// Error generated when a PREF is out of bounds.
121    #[error("pref '{0}' is out of bounds, must be between 1 and 100")]
122    PrefOutOfRange(u8),
123
124    /// Error generated when a PID is invalid.
125    #[error("pid '{0}' is invalid")]
126    InvalidPid(String),
127
128    /// Error generated when an unquoted value was encountered when it must
129    /// be quoted; eg: the GEO parameter URI.
130    #[error("'{0}' must be enclosed in quotes")]
131    NotQuoted(String),
132
133    /// Error generated when MEMBER is specified but the kind is not group.
134    #[error("member property is only allowed when the kind is group")]
135    MemberRequiresGroup,
136
137    /// Error generated when the PID parameter is used on the
138    /// CLIENTPIDMAP property.
139    #[error("PID parameter not allowed for CLIENTPIDMAP")]
140    ClientPidMapPidNotAllowed,
141
142    /// Errors generated by the language tags library.
143    #[cfg(feature = "language-tags")]
144    #[error(transparent)]
145    LanguageParse(#[from] language_tags::ParseError),
146
147    /// Errors generated by the URI library.
148    #[error(transparent)]
149    UriParse(#[from] uriparse::uri::URIError),
150
151    /// Errors generated by time library.
152    #[error(transparent)]
153    ComponentRange(#[from] time::error::ComponentRange),
154
155    /// Errors generated by time library parsing.
156    #[error(transparent)]
157    TimeParse(#[from] time::error::Parse),
158
159    /// Errors generated by time library formatting.
160    #[error(transparent)]
161    TimeFormat(#[from] time::error::Format),
162
163    /// Errors generated by time library format descriptions.
164    #[error(transparent)]
165    TimeInvalidFormat(#[from] time::error::InvalidFormatDescription),
166
167    /// Error generated parsing a string to an integer.
168    #[error(transparent)]
169    ParseInt(#[from] std::num::ParseIntError),
170
171    /// Error generated parsing a string to a float.
172    #[error(transparent)]
173    ParseFloat(#[from] std::num::ParseFloatError),
174
175    /// Error generated parsing a media type.
176    #[cfg(feature = "mime")]
177    #[error(transparent)]
178    Mime(#[from] mime::FromStrError),
179
180    /// Error generated decoding from base64.
181    #[error(transparent)]
182    Base64(#[from] base64::DecodeError),
183
184    /// Error generated during lexing.
185    #[error(transparent)]
186    LexError(#[from] LexError),
187
188    /// Error generated when a CHARSET other than UTF-8 is specified.
189    #[error("CHARSET='{0}' is invalid, expected UTF-8")]
190    CharsetParameter(String),
191}