#[cfg(feature = "host")]
use crate::sns::report::{SnsHostError, SnsLookupRequest};
pub const DEFAULT_SNS_METRICS_TIME_WINDOW_SECONDS: u64 = 30 * 24 * 60 * 60;
pub const MAX_SNS_METRICS_TIME_WINDOW_SECONDS: u64 = 365 * 24 * 60 * 60;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct SnsMetricsRequest {
pub network: String,
pub source_endpoint: String,
pub now_unix_secs: u64,
pub input: String,
pub time_window_seconds: u64,
}
impl SnsMetricsRequest {
#[must_use]
pub fn new(
network: impl Into<String>,
source_endpoint: impl Into<String>,
now_unix_secs: u64,
input: impl Into<String>,
) -> Self {
Self {
network: network.into(),
source_endpoint: source_endpoint.into(),
now_unix_secs,
input: input.into(),
time_window_seconds: DEFAULT_SNS_METRICS_TIME_WINDOW_SECONDS,
}
}
#[must_use]
pub const fn with_time_window_seconds(mut self, time_window_seconds: u64) -> Self {
self.time_window_seconds = time_window_seconds;
self
}
}
#[cfg(feature = "host")]
pub(in crate::sns::report) fn validate_sns_metrics_request(
request: &SnsMetricsRequest,
) -> Result<(), SnsHostError> {
validate_sns_metrics_time_window(request.time_window_seconds)
}
#[cfg(feature = "host")]
pub(in crate::sns::report) fn validate_sns_metrics_time_window(
time_window_seconds: u64,
) -> Result<(), SnsHostError> {
if !(1..=MAX_SNS_METRICS_TIME_WINDOW_SECONDS).contains(&time_window_seconds) {
return Err(SnsHostError::InvalidMetricsTimeWindow {
seconds: time_window_seconds,
max_seconds: MAX_SNS_METRICS_TIME_WINDOW_SECONDS,
});
}
Ok(())
}
#[cfg(feature = "host")]
pub(in crate::sns::report) fn sns_metrics_lookup_request(
request: &SnsMetricsRequest,
) -> SnsLookupRequest {
SnsLookupRequest {
network: request.network.clone(),
source_endpoint: request.source_endpoint.clone(),
now_unix_secs: request.now_unix_secs,
input: request.input.clone(),
}
}