ic_query/sns/report/model/requests/
metrics.rs1use super::lookup::SnsLookupRequest;
8#[cfg(feature = "sns-host")]
9use crate::sns::report::SnsHostError;
10
11pub const DEFAULT_SNS_METRICS_TIME_WINDOW_SECONDS: u64 = 30 * 24 * 60 * 60;
13
14pub const MAX_SNS_METRICS_TIME_WINDOW_SECONDS: u64 = 365 * 24 * 60 * 60;
16
17#[derive(Clone, Debug, Eq, PartialEq)]
24pub struct SnsMetricsRequest {
25 pub lookup: SnsLookupRequest,
27 pub time_window_seconds: u64,
29}
30
31impl SnsMetricsRequest {
32 #[must_use]
34 pub const fn new(lookup: SnsLookupRequest) -> Self {
35 Self {
36 lookup,
37 time_window_seconds: DEFAULT_SNS_METRICS_TIME_WINDOW_SECONDS,
38 }
39 }
40
41 #[must_use]
43 pub const fn with_time_window_seconds(mut self, time_window_seconds: u64) -> Self {
44 self.time_window_seconds = time_window_seconds;
45 self
46 }
47}
48
49#[cfg(feature = "sns-host")]
50pub(in crate::sns::report) fn validate_sns_metrics_request(
51 request: &SnsMetricsRequest,
52) -> Result<(), SnsHostError> {
53 validate_sns_metrics_time_window(request.time_window_seconds)
54}
55
56#[cfg(feature = "sns-host")]
57pub(in crate::sns::report) fn validate_sns_metrics_time_window(
58 time_window_seconds: u64,
59) -> Result<(), SnsHostError> {
60 if !(1..=MAX_SNS_METRICS_TIME_WINDOW_SECONDS).contains(&time_window_seconds) {
61 return Err(SnsHostError::InvalidMetricsTimeWindow {
62 seconds: time_window_seconds,
63 max_seconds: MAX_SNS_METRICS_TIME_WINDOW_SECONDS,
64 });
65 }
66 Ok(())
67}