1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// @generated by satay. Do not edit by hand.
#![allow(
clippy::doc_markdown,
clippy::missing_errors_doc,
clippy::must_use_candidate,
clippy::needless_pass_by_value,
clippy::return_self_not_must_use,
clippy::single_match_else
)]
use super::{Api as RootApi, NeaWeatherSubApi, UvAction, WeatherSubApiAction};
/// UV index, lightning, and heat stress (WBGT) data.
#[derive(Debug, Clone, Copy)]
pub struct Api<'a> {
pub(crate) api: &'a RootApi,
}
impl<'a> Api<'a> {
/// <https://api-open.data.gov.sg/v2/real-time/api/uv>
///
/// - Updated between 7 AM and 7 PM everyday
///
/// - The UV index value is averaged over the preceding hour
///
/// - Filter for a specific date by providing `date` in query parameter (YYYY-MM-DD).
///
/// - example: `?date=2024-07-16`
///
/// - If `date` is not provided in query parameter, API will return the latest reading
///
/// - Unit of measure for readings is `Ultraviolet Index`
///
/// # Optional request settings
///
/// - [`date`](UvAction::date): SGT date for which to retrieve data (YYYY-MM-DD). Omit for latest.
/// - [`pagination_token`](UvAction::pagination_token): Pagination token for subsequent pages (only when date filter is used and more pages exist).
/// - [`x_api_key`](UvAction::x_api_key): Optional API key for higher rate limits.
///
/// # Example
///
/// ```rust,ignore
/// let request = api
/// .environment()
/// .uv()
/// .date(date)
/// .request()?;
/// ```
pub fn uv(&self) -> UvAction<'a> {
UvAction::new(self.api)
}
/// Unified weather sub-API endpoint.
///
/// - `?api=lightning` — Cloud-to-ground and cloud-to-cloud lightning strikes. Updated every ~2–3 minutes.
///
/// - `?api=wbgt` — Wet Bulb Globe Temperature heat stress readings. Updated every 15 minutes.
///
/// <https://api-open.data.gov.sg/v2/real-time/api/weather?api=lightning>
///
/// - Updated multiple times throughout the day
///
/// - Filter for a specific date by providing `date` in query parameter (YYYY-MM-DD).
///
/// - example: `?date=2025-01-16`
///
/// - If `date` is not provided in query parameter, API will return the latest lightning observation
///
/// # Arguments
///
/// - `api`: Sub-API selector (lightning or wbgt). Required.
///
/// # Optional request settings
///
/// - [`date`](WeatherSubApiAction::date): SGT date for which to retrieve data (YYYY-MM-DD). Omit for latest.
/// - [`pagination_token`](WeatherSubApiAction::pagination_token): Pagination token for subsequent pages (only when date filter is used and more pages exist).
/// - [`x_api_key`](WeatherSubApiAction::x_api_key): Optional API key for higher rate limits.
///
/// # Example
///
/// ```rust,ignore
/// let request = api
/// .environment()
/// .weather_sub_api(api)
/// .date(date)
/// .request()?;
/// ```
pub fn weather_sub_api(&self, api: NeaWeatherSubApi) -> WeatherSubApiAction<'a> {
WeatherSubApiAction::new(self.api, api)
}
}