1use crate::Search;
2use chrono::{DateTime, FixedOffset};
3use serde_json::{Map, Value};
4use thiserror::Error;
5
6#[derive(Debug, Error)]
8#[non_exhaustive]
9pub enum Error {
10 #[error("cannot convert queries to strings")]
12 CannotConvertQueryToString(Map<String, Value>),
13
14 #[error("cannot convert cql2-json to strings")]
18 CannotConvertCql2JsonToString(Map<String, Value>),
19
20 #[error(transparent)]
22 ChronoParse(#[from] chrono::ParseError),
23
24 #[error(transparent)]
26 Cql2(#[from] Box<cql2::Error>),
27
28 #[error(transparent)]
30 GeoJson(#[from] Box<geojson::Error>),
31
32 #[error("empty datetime interval")]
34 EmptyDatetimeInterval,
35
36 #[error("feature not enabled: {0}")]
38 FeatureNotEnabled(&'static str),
39
40 #[error("invalid bbox ({0:?}): {1}")]
42 InvalidBbox(Vec<f64>, &'static str),
43
44 #[error(transparent)]
46 #[cfg(feature = "client")]
47 InvalidHeaderName(#[from] http::header::InvalidHeaderName),
48
49 #[error(transparent)]
51 #[cfg(feature = "client")]
52 InvalidHeaderValue(#[from] http::header::InvalidHeaderValue),
53
54 #[error(transparent)]
56 #[cfg(feature = "client")]
57 InvalidMethod(#[from] http::method::InvalidMethod),
58
59 #[error(transparent)]
61 #[cfg(feature = "client")]
62 Io(#[from] std::io::Error),
63
64 #[error(transparent)]
66 #[cfg(feature = "client")]
67 Join(#[from] tokio::task::JoinError),
68
69 #[error(transparent)]
71 ParseIntError(#[from] std::num::ParseIntError),
72
73 #[error(transparent)]
75 ParseFloatError(#[from] std::num::ParseFloatError),
76
77 #[error(transparent)]
79 #[cfg(feature = "client")]
80 Reqwest(#[from] reqwest::Error),
81
82 #[error("search has bbox and intersects")]
84 SearchHasBboxAndIntersects(Box<Search>),
85
86 #[error(transparent)]
88 SerdeJson(#[from] serde_json::Error),
89
90 #[error(transparent)]
92 SerdeUrlencodedSer(#[from] serde_urlencoded::ser::Error),
93
94 #[error(transparent)]
96 Stac(#[from] stac::Error),
97
98 #[error("start ({0}) is after end ({1})")]
100 StartIsAfterEnd(DateTime<FixedOffset>, DateTime<FixedOffset>),
101
102 #[error(transparent)]
104 TryFromInt(#[from] std::num::TryFromIntError),
105
106 #[error(transparent)]
108 UrlParse(#[from] url::ParseError),
109
110 #[error("this functionality is not yet implemented: {0}")]
112 Unimplemented(&'static str),
113}