1use thiserror::Error;
2
3pub(crate) type BoxError = Box<dyn std::error::Error + Send + Sync + 'static>;
4pub(crate) type Result<T> = std::result::Result<T, LineProtocolError>;
5
6#[derive(Debug, Error)]
7pub enum BuilderError {
8 #[error("measurement name cannot be empty")]
9 EmptyMeasurement,
10
11 #[error("measurement name cannot start with '_' (underscore)")]
12 InvalidMeasurement,
13
14 #[error("tag key cannot be empty")]
15 EmptyTagKey,
16
17 #[error("tag key cannot start with '_' (underscore)")]
18 InvalidTagKey,
19
20 #[error("tag value cannot be empty")]
21 EmptyTagValue,
22
23 #[error("key cannot be empty")]
24 EmptyFieldKey,
25
26 #[error("key cannot start with '_' (underscore)")]
27 InvalidFieldKey,
28
29 #[error("value cannot be empty")]
30 EmptyFieldValue,
31
32 #[error("atleast one field is required")]
33 MissingFields,
34}
35
36#[derive(Debug, Error)]
37pub enum ParseError {
38 #[error("line is a comment")]
39 CommentLine,
40
41 #[error("line cannot be empty")]
42 EmptyLine,
43
44 #[error("measurement name cannot be empty")]
45 MissingMeasurement,
46
47 #[error("atleast one field is required")]
48 MissingFields,
49
50 #[error("timestamp is not a valid number")]
51 InvalidTimestamp,
52
53 #[error("invalid set: {0}")]
54 InvalidSet(#[source] BoxError),
55}
56
57#[derive(Debug, Error)]
58pub enum LineProtocolError {
59 #[error("A builder error occured: {0}")]
60 BuilderError(#[from] BuilderError),
61
62 #[error("A parser error occured: {0}")]
63 ParserError(#[from] ParseError),
64}