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 {
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![
"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
);
}
}