1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use serde_repr::{Deserialize_repr, Serialize_repr};
/// 5.3 Creative Attributes
///
/// The following table specifies a standard list of creative attributes that can describe an ad
/// being served or serve as restrictions of thereof.
#[allow(non_camel_case_types)]
#[derive(Serialize_repr, Deserialize_repr, Debug, PartialEq, Eq, Clone, Copy)]
#[repr(i32)]
pub enum CreativeAttribute {
    /// Audio Ad (Auto-Play)
    AudioAd_AutoPlay = 1,
    /// Audio Ad (User Initiated)
    AudioAd_UserInitiated,
    /// Expandable (Automatic)
    Expandable_Automatic,
    /// Expandable (User Initiated - Click)
    Expandable_UserInitiated_Click,
    /// Expandable (User Initiated - Rollover)
    Expandable_UserInitiated_Rollover,
    /// In-Banner Video Ad (Auto-Play)
    InBannerVideoAd_AutoPlay,
    /// In-Banner Video Ad (User Initiated)
    InBannerVideoAd_UserInitiated,
    /// Pop (e.g., Over, Under, or Upon Exit)
    Pop,
    /// Provocative or Suggestive Imagery
    ProvocativeOrSuggestiveImagery,
    /// Shaky, Flashing, Flickering, Extreme Animation, Smileys
    Annoying,
    /// Surveys
    Surveys,
    /// Text Only
    TextOnly,
    /// User Interactive (e.g., Embedded Games)
    UserInteractive,
    /// Windows Dialog or Alert Style
    WindowsDialogOrAlertStyle,
    /// Has Audio On/Off Button
    HasAudioOnOffButton,
    /// Ad Provides Skip Button (e.g. VPAID-rendered skip button on pre-roll video)
    AdProvidesSkipButton,
    /// Adobe Flash
    AdobeFlash,
}
#[cfg(test)]
mod test {
    use super::*;
    #[test]
    fn json() -> serde_json::Result<()> {
        assert!(serde_json::from_str::<CreativeAttribute>("-1").is_err());
        let json = "[1,2]";
        let e1: Vec<CreativeAttribute> = serde_json::from_str(json)?;
        assert_eq!(
            e1,
            vec![
                CreativeAttribute::AudioAd_AutoPlay,
                CreativeAttribute::AudioAd_UserInitiated
            ]
        );
        assert_eq!(serde_json::to_string(&e1)?, json);
        Ok(())
    }
}