openrtb_native1/
event_type.rs

1/// 7.6 Event Types Table
2#[derive(Debug, PartialEq, Eq, Clone, Copy)]
3pub enum EventType {
4    /// impression.
5    Impression,
6    /// Visible impression using MRC definition at 50% in view for 1 second.
7    ViewableMrc50,
8    /// 100% in view for 1 second (ie GroupM standard).
9    ViewableMrc100,
10    /// Visible impression for video using MRC definition at 50% in view for 2 seconds.
11    ViewableVideo50,
12    /// 500+
13    ExchangeSpecific(i32),
14}
15
16crate::impl_enum_serde!(
17    #[exchange(ident = ExchangeSpecific, greater = 500)]
18    EventType {
19        Impression = 1,
20        ViewableMrc50 = 2,
21        ViewableMrc100 = 3,
22        ViewableVideo50 = 4,
23    }
24);
25
26#[cfg(test)]
27mod test {
28    use super::*;
29
30    #[test]
31    fn json() -> serde_json::Result<()> {
32        assert!(serde_json::from_str::<EventType>("0").is_err());
33        assert!(serde_json::from_str::<EventType>("500").is_err());
34
35        let json = "[1,2,501]";
36        let e1: Vec<EventType> = serde_json::from_str(json)?;
37        assert_eq!(serde_json::to_string(&e1)?, json);
38        assert_eq!(
39            e1,
40            vec![
41                EventType::Impression,
42                EventType::ViewableMrc50,
43                EventType::ExchangeSpecific(501),
44            ]
45        );
46
47        Ok(())
48    }
49}