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
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
use serde_enum_str::{Deserialize_enum_str, Serialize_enum_str};

#[derive(Deserialize_enum_str, Serialize_enum_str, PartialEq, Eq, Hash, Debug, Clone)]
#[serde(rename_all = "snake_case")]
pub enum FacebookPermission {
    // Don't Edit, copy from html_parser
    AdsManagement,
    AdsRead,
    AttributionRead,
    BusinessManagement,
    CatalogManagement,
    Email,
    GroupsAccessMemberInfo,
    InstagramBasic,
    InstagramContentPublish,
    InstagramManageComments,
    InstagramManageInsights,
    LeadsRetrieval,
    PagesEvents,
    PagesManageAds,
    PagesManageCta,
    PagesManageInstantArticles,
    PagesManageEngagement,
    PagesManageMetadata,
    PagesManagePosts,
    PagesMessaging,
    PagesReadEngagement,
    PagesReadUserContent,
    PagesShowList,
    PagesUserGender,
    PagesUserLocale,
    PagesUserTimezone,
    PublicProfile,
    PublishToGroups,
    PublishVideo,
    ReadInsights,
    UserAgeRange,
    UserBirthday,
    UserFriends,
    UserGender,
    UserHometown,
    UserLikes,
    UserLink,
    UserLocation,
    UserMessengerContact,
    UserPhotos,
    UserPosts,
    UserVideos,
}

#[cfg(test)]
mod tests {
    use super::*;

    use serde::Deserialize;

    #[test]
    fn test_de() {
        #[derive(Deserialize)]
        struct Foo {
            permission: FacebookPermission,
        }

        let permissions = vec![
            // Don't Edit, copy from html_parser
            "ads_management",
            "ads_read",
            "attribution_read",
            "business_management",
            "catalog_management",
            "email",
            "groups_access_member_info",
            "instagram_basic",
            "instagram_content_publish",
            "instagram_manage_comments",
            "instagram_manage_insights",
            "leads_retrieval",
            "pages_events",
            "pages_manage_ads",
            "pages_manage_cta",
            "pages_manage_instant_articles",
            "pages_manage_engagement",
            "pages_manage_metadata",
            "pages_manage_posts",
            "pages_messaging",
            "pages_read_engagement",
            "pages_read_user_content",
            "pages_show_list",
            "pages_user_gender",
            "pages_user_locale",
            "pages_user_timezone",
            "public_profile",
            "publish_to_groups",
            "publish_video",
            "read_insights",
            "user_age_range",
            "user_birthday",
            "user_friends",
            "user_gender",
            "user_hometown",
            "user_likes",
            "user_link",
            "user_location",
            "user_messenger_contact",
            "user_photos",
            "user_posts",
            "user_videos",
        ];
        for permission in permissions {
            match serde_json::from_str::<Foo>(
                format!(r#"{{"permission": "{}"}}"#, permission).as_str(),
            ) {
                Ok(_) => {}
                Err(err) => assert!(false, "{}", err),
            }
        }

        assert_eq!(
            serde_json::from_str::<Foo>(r#"{"permission": "pages_manage_metadata"}"#)
                .unwrap()
                .permission,
            FacebookPermission::PagesManageMetadata
        );
    }
}