eskom_se_push_api/
area_info.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)]
17#[builder()]
18pub struct AreaInfoURL {
19 area_id: String,
20}
21
22impl Endpoint for AreaInfoURL {
23 type Output = AreaInfo;
24
25 fn endpoint(&self) -> std::borrow::Cow<'static, str> {
26 std::borrow::Cow::Borrowed("https://developer.sepush.co.za/business/2.0/area")
27 }
28
29 fn url(&self) -> Result<url::Url, crate::errors::HttpError> {
30 let mut u = url::Url::parse(&self.endpoint()).unwrap();
31 if self.area_id.trim().is_empty() {
32 Err(HttpError::AreaIdNotSet)
33 } else {
34 u.set_query(Some(format!("id={}", self.area_id).as_str()));
35 Ok(u)
36 }
37 }
38}
39#[cfg(any(feature = "async", doc))]
40impl EndpointAsync for AreaInfoURL {}
41
42#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
43#[serde(rename_all = "camelCase")]
44pub struct AreaInfo {
45 pub events: Vec<Event>,
47 pub info: Info,
49 pub schedule: Schedule,
53}
54
55#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
56#[serde(rename_all = "camelCase")]
57pub struct Event {
58 pub end: String,
61 pub note: String,
64 pub start: String,
67}
68
69#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct Info {
72 pub name: String,
73 pub region: String,
74}
75
76#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct Schedule {
79 pub days: Vec<Day>,
81 pub source: String,
83}
84
85#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
86#[serde(rename_all = "camelCase")]
87pub struct Day {
88 pub date: String,
91 pub name: String,
94 pub stages: Vec<Vec<String>>,
101}