use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use crate::custom_serde::deserialize_lambda_map;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Window {
pub start: DateTime<Utc>,
pub end: DateTime<Utc>,
}
impl Default for Window {
fn default() -> Self {
Window {
start: Utc::now(),
end: Utc::now(),
}
}
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TimeWindowProperties {
pub window: Window,
#[serde(deserialize_with = "deserialize_lambda_map")]
#[serde(default)]
pub state: HashMap<String, String>,
#[serde(default)]
pub shard_id: Option<String>,
#[serde(default)]
#[serde(rename = "eventSourceARN")]
pub event_source_arn: Option<String>,
pub is_final_invoke_for_window: bool,
pub is_window_terminated_early: bool,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TimeWindowEventResponseProperties {
#[serde(deserialize_with = "deserialize_lambda_map")]
#[serde(default)]
pub state: HashMap<String, String>,
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_window_deserializer() {
let v = serde_json::json!({
"start": "2020-12-09T07:04:00Z",
"end": "2020-12-09T07:06:00Z",
});
let parsed: Window = serde_json::from_value(v).unwrap();
assert_eq!("2020-12-09T07:04:00+00:00", &parsed.start.to_rfc3339());
assert_eq!("2020-12-09T07:06:00+00:00", &parsed.end.to_rfc3339());
}
}