eskom_se_push_api/
area_search.rs

1use 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  /// Vec of areas
41  pub areas: Vec<Area>,
42}
43
44#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct Area {
47  /// ID of the area. To be used when querying for the related info.
48  pub id: String,
49  /// Name of the area.
50  pub name: String,
51  /// Region the area is in.
52  pub region: String,
53}