use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
#[serde(tag = "kind", content = "data", rename_all = "snake_case")]
pub(crate) enum TelemetryEvent {
Analytics(AnalyticsEvent),
}
#[derive(Serialize, Deserialize)]
#[serde(tag = "action", rename_all = "snake_case")]
pub(crate) enum AnalyticsEvent {
Initialized,
CompositionTimeInMs(CompositionTiming),
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) struct CompositionTiming {
pub(crate) value: u64,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize_initialized_event() {
let event = TelemetryEvent::Analytics(AnalyticsEvent::Initialized);
let serialized = serde_json::to_string(&event).unwrap();
assert_eq!(
serialized,
r#"{"kind":"analytics","data":{"action":"initialized"}}"#
);
}
#[test]
fn test_serialize_composition_timing_event() {
let event =
TelemetryEvent::Analytics(AnalyticsEvent::CompositionTimeInMs(CompositionTiming {
value: 42,
}));
let serialized = serde_json::to_string(&event).unwrap();
assert_eq!(
serialized,
r#"{"kind":"analytics","data":{"action":"composition_time_in_ms","value":42}}"#
);
}
}