eskom_se_push_api/
area_search.rs1use derive_builder::Builder;
2use serde::Deserialize;
3use serde::Serialize;
4
5use crate::errors::HttpError;
6use crate::traits::Endpoint;
7#[cfg(any(feature = "async", doc))]
8use crate::traits::EndpointAsync;
9
10#[derive(Default, Builder, Debug)]
11#[builder(setter(into))]
12pub struct AreaSearchURL {
13 search_term: String,
14}
15
16impl Endpoint for AreaSearchURL {
17 type Output = AreaSearch;
18
19 fn endpoint(&self) -> std::borrow::Cow<'static, str> {
20 std::borrow::Cow::Borrowed("https://developer.sepush.co.za/business/2.0/areas_search")
21 }
22
23 fn url(&self) -> Result<url::Url, crate::errors::HttpError> {
24 let mut u = url::Url::parse(&self.endpoint()).unwrap();
25 if self.search_term.trim().is_empty() {
26 Err(HttpError::SearchTextNotSet)
27 } else {
28 u.set_query(Some(format!("text={}", self.search_term).as_str()));
29 Ok(u)
30 }
31 }
32}
33
34#[cfg(any(feature = "async", doc))]
35impl EndpointAsync for AreaSearchURL {}
36
37#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
38#[serde(rename_all = "camelCase")]
39pub struct AreaSearch {
40 pub areas: Vec<Area>,
42}
43
44#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct Area {
47 pub id: String,
49 pub name: String,
51 pub region: String,
53}