plex_api/media_container/server/
feature.rs

1// This file is automatically @generated by build.rs.
2// It is not intended for manual editing.
3
4#![allow(deprecated)]
5
6use serde::{Deserialize, Serialize};
7use serde_plain::derive_display_from_serialize;
8use tracing::trace_span;
9
10#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
11#[allow(clippy::enum_variant_names)]
12#[rustfmt::skip]
13pub enum Feature {
14    #[serde(
15        rename = "ad-countdown-timer",
16        alias = "3ae06d3a-a76b-435e-8cef-2d2008610ba2"
17    )]
18    AdCountdownTimer,
19    #[serde(
20        rename = "adaptive_bitrate",
21        alias = "abd37b14-706c-461f-8255-fa9563882af3"
22    )]
23    AdaptiveBitrate,
24    #[serde(
25        rename = "album-types",
26        alias = "1df3cd16-faf2-4d37-8349-1fcf3713bf1d"
27    )]
28    AlbumTypes,
29    #[serde(
30        rename = "allow_dvr",
31        alias = "d8810b38-ec9b-494c-8555-3df6e365dfbd"
32    )]
33    AllowDvr,
34    #[serde(
35        rename = "amazon-loop-debug",
36        alias = "d1477307-4dac-4e57-9258-252e5b908693"
37    )]
38    AmazonLoopDebug,
39    #[serde(
40        rename = "Android - Dolby Vision",
41        alias = "b227c158-e062-4ff1-95d8-8ed11cecafb1"
42    )]
43    AndroidDolbyVision,
44    #[serde(
45        rename = "Android - PiP",
46        alias = "86da2200-58db-4d78-ba46-f146ba25906b"
47    )]
48    AndroidPiP,
49    #[serde(
50        rename = "artist-tv",
51        alias = "2797e341-b062-46ed-862f-0acbba5dd522"
52    )]
53    ArtistTv,
54    #[serde(
55        rename = "auto-sub-offsets",
56        alias = "d4b4e08a-9201-4c99-9a52-8f2de8ff25cd"
57    )]
58    AutoSubOffsets,
59    #[serde(
60        rename = "avod-ad-analysis",
61        alias = "c987122a-a796-432f-af00-953821c127bb"
62    )]
63    AvodAdAnalysis,
64    #[serde(
65        rename = "avod-ad-loudness",
66        alias = "05826f20-284b-4bcb-b45c-2367e5c0ea72"
67    )]
68    AvodAdLoudness,
69    #[serde(
70        rename = "avod-new-media",
71        alias = "e703655b-ee05-4e24-97e3-a138da62c425"
72    )]
73    AvodNewMedia,
74    #[serde(
75        rename = "blacklist_get_signin",
76        alias = "bec2ba97-4b25-472b-9cfc-674f5c68c2ae"
77    )]
78    BlacklistGetSignin,
79    #[serde(
80        rename = "blacklist-subnets",
81        alias = "b3b87f19-5ccd-4b14-bb62-b9d7b982392e"
82    )]
83    BlacklistSubnets,
84    #[serde(
85        rename = "boost-voices",
86        alias = "c2409baa-d044-45c7-b1f4-e9e7ccd2d128"
87    )]
88    BoostVoices,
89    #[serde(
90        rename = "bypass-web-navbar-upsell-modal",
91        alias = "6aaaf4fc-c55f-4042-92c8-b35f7886d249"
92    )]
93    BypassWebNavbarUpsellModal,
94    #[serde(
95        rename = "camera_upload",
96        alias = "fb34e64d-cd89-47b8-8bae-a6d20c542bae"
97    )]
98    CameraUpload,
99    #[serde(
100        rename = "chromecast-music-mp",
101        alias = "58829fc9-26b8-41f4-a6c0-90ea7a11ae24"
102    )]
103    ChromecastMusicMp,
104    #[serde(
105        rename = "client-non-destructive-comskip",
106        alias = "6ab6677b-ad9b-444f-9ca1-b8027d05b3e1"
107    )]
108    ClientNonDestructiveComskip,
109    #[serde(
110        rename = "client-radio-stations",
111        alias = "5b6190a9-77a4-477e-9fbc-c8118e35a4c1"
112    )]
113    ClientRadioStations,
114    #[serde(
115        rename = "cloud-livetv",
116        alias = "dbab9396-78ff-48f5-a5ce-c76539ed1b6e"
117    )]
118    #[deprecated]
119    CloudLivetv,
120    #[serde(
121        rename = "cloudflare-turnstile-required",
122        alias = "b25b878c-4f60-4337-9f6b-2d97ef41d036"
123    )]
124    CloudflareTurnstileRequired,
125    #[serde(
126        rename = "cloudsync",
127        alias = "65152b75-13a9-408a-bd30-dbd23a259183"
128    )]
129    Cloudsync,
130    #[serde(
131        rename = "collections",
132        alias = "1417df52-986e-4e4b-8dcd-3997fbc5c976"
133    )]
134    Collections,
135    #[serde(
136        rename = "comments_and_replies_push_notifications",
137        alias = "7f46bf17-fabf-4f96-99a2-cf374f6eed71"
138    )]
139    CommentsAndRepliesPushNotifications,
140    #[serde(
141        rename = "common-sense-media-ratings-premium",
142        alias = "f702522e-2445-461e-a83f-fc16c1259035"
143    )]
144    CommonSenseMediaRatingsPremium,
145    #[serde(
146        rename = "community_access_plex_tv",
147        alias = "3f6baa76-7488-479a-9e4f-49ff2c0d3711"
148    )]
149    CommunityAccessPlexTv,
150    #[serde(
151        rename = "community_friends_and_followers_new_followers_push",
152        alias = "359796ce-d614-427f-8165-19ff62ca053a"
153    )]
154    CommunityFriendsAndFollowersNewFollowersPush,
155    #[serde(
156        rename = "community_friends_group_notifications",
157        alias = "dd69b465-7eb3-4c18-a1c0-7bc0015969e8"
158    )]
159    CommunityFriendsGroupNotifications,
160    #[serde(
161        rename = "community-friendships-management",
162        alias = "7bb1ed71-a0a3-4362-aa08-7c3fa7241578"
163    )]
164    CommunityFriendshipsManagement,
165    #[serde(
166        rename = "community-new-user-onboarding",
167        alias = "c4704b28-4e26-460a-bf2e-2576d0c2cb77"
168    )]
169    CommunityNewUserOnboarding,
170    #[serde(
171        rename = "community-p1",
172        alias = "6272ad55-9fc0-43c6-8e1a-3f0df7a3630e"
173    )]
174    CommunityP1,
175    #[serde(
176        rename = "community-p2-r1",
177        alias = "31fcbe1f-0459-42cb-a15f-5084f62374d9"
178    )]
179    CommunityP2R1,
180    #[serde(
181        rename = "community-p2-r2",
182        alias = "06798ab7-4fa5-4416-9db3-f313c4292f01"
183    )]
184    CommunityP2R2,
185    #[serde(
186        rename = "community-p2-r3",
187        alias = "626004b8-a8b8-4fb1-9adc-8a6277f98597"
188    )]
189    CommunityP2R3,
190    #[serde(
191        rename = "community-p2-r4",
192        alias = "8f47a689-aa84-408f-bf6b-00015e9413e1"
193    )]
194    CommunityP2R4,
195    #[serde(
196        rename = "community-p2-r5",
197        alias = "36fdfb7c-f0c7-4da8-a167-4775e23cab7e"
198    )]
199    CommunityP2R5,
200    #[serde(
201        rename = "community-p2r5-onboarding",
202        alias = "92c11c50-efed-4eb1-b3fb-0b249fbfc845"
203    )]
204    CommunityP2r5Onboarding,
205    #[serde(
206        rename = "community-p3r1-profiles",
207        alias = "52a31c3c-c8d4-49c8-9f47-18158e5528d8"
208    )]
209    CommunityP3r1Profiles,
210    #[serde(
211        rename = "community-p3r1-reactions",
212        alias = "ad57040a-0b38-4862-bfcf-3fe116e9767b"
213    )]
214    CommunityP3r1Reactions,
215    #[serde(
216        rename = "community-p3r1-reviews",
217        alias = "e73456a8-8962-4151-8e57-3e61c78ed9d3"
218    )]
219    CommunityP3r1Reviews,
220    #[serde(
221        rename = "community-p3r1-reviews-comments",
222        alias = "47c8dede-c75d-4015-8631-8fe5665638c8"
223    )]
224    CommunityP3r1ReviewsComments,
225    #[serde(
226        rename = "community-p3r1-reviews-comments-final",
227        alias = "81f9b923-039c-4828-8455-14de4ffa2059"
228    )]
229    CommunityP3r1ReviewsCommentsFinal,
230    #[serde(
231        rename = "community-p3r1-reviews-creation",
232        alias = "6f4f6325-7d66-405f-96f7-b89b9685473e"
233    )]
234    CommunityP3r1ReviewsCreation,
235    #[serde(
236        rename = "community-phase0",
237        alias = "fc3e8322-5e6e-4f4a-9d71-728c6d5656bd"
238    )]
239    CommunityPhase0,
240    #[serde(
241        rename = "community-phase0-web",
242        alias = "a852775a-2b74-4624-aaa3-3d624471a537"
243    )]
244    CommunityPhase0Web,
245    #[serde(
246        rename = "companions_sonos",
247        alias = "24b4cf36-b296-4002-86b7-f1adb657e76a"
248    )]
249    CompanionsSonos,
250    #[serde(
251        rename = "conan_redirect_alpha",
252        alias = "78643fe5-d192-40c7-8e93-5ccf04c0b767"
253    )]
254    #[deprecated]
255    ConanRedirectAlpha,
256    #[serde(
257        rename = "conan_redirect_beta",
258        alias = "bfeaee4e-965a-4d24-b163-020c3c57d936"
259    )]
260    #[deprecated]
261    ConanRedirectBeta,
262    #[serde(
263        rename = "conan_redirect_nightlies",
264        alias = "98872b06-2ff3-4b71-96bc-039e2ebe7adc"
265    )]
266    #[deprecated]
267    ConanRedirectNightlies,
268    #[serde(
269        rename = "conan_redirect_nightly",
270        alias = "7e7596aa-6e2c-41d1-a460-1e13cf0b62f2"
271    )]
272    #[deprecated]
273    ConanRedirectNightly,
274    #[serde(
275        rename = "conan_redirect_public",
276        alias = "b20d91ca-1b2f-45a2-a115-c1ad24c66ac5"
277    )]
278    #[deprecated]
279    ConanRedirectPublic,
280    #[serde(
281        rename = "conan_redirect_qa",
282        alias = "16d69c53-4c40-4821-b9f3-57ca690b2d4d"
283    )]
284    #[deprecated]
285    ConanRedirectQa,
286    #[serde(
287        rename = "content_filter",
288        alias = "32cc8bf5-b425-4582-a52d-71b4f1cf436b"
289    )]
290    ContentFilter,
291    #[serde(
292        rename = "create_anonymous_users",
293        alias = "f6a0e423-1a83-418c-8448-a1c7105fd71a"
294    )]
295    CreateAnonymousUsers,
296    #[serde(
297        rename = "credits-markers",
298        alias = "926bc176-58ca-47da-b8e3-080ed14ea6ba"
299    )]
300    CreditsMarkers,
301    #[serde(
302        rename = "CU Sunset",
303        alias = "567033ef-ffee-44fb-8f90-f678077445f9"
304    )]
305    CuSunset,
306    #[serde(
307        rename = "custom-home-removal",
308        alias = "849433b0-ef60-4a71-9dd9-939bc01f5362"
309    )]
310    CustomHomeRemoval,
311    #[serde(
312        rename = "disable-facebook-auth",
313        alias = "00077925-6031-401b-8679-f6617ed0cec6"
314    )]
315    DisableFacebookAuth,
316    #[serde(
317        rename = "disable_home_user_friendships",
318        alias = "d29f0ee0-3d3a-46c3-b582-4bc69bc17c29"
319    )]
320    DisableHomeUserFriendships,
321    #[serde(
322        rename = "disable_sharing_friendships",
323        alias = "ce8f644e-87ce-4ba5-b165-fadd69778019"
324    )]
325    DisableSharingFriendships,
326    #[serde(
327        rename = "disco-director-cast-crew-updates",
328        alias = "d865f64a-ca06-472d-ae01-7a444aba6251"
329    )]
330    DiscoDirectorCastCrewUpdates,
331    #[serde(
332        rename = "disco-epg-airings-on-detail-pages",
333        alias = "e9cc7ec1-be5a-4727-af7b-0f107af1a07c"
334    )]
335    DiscoEpgAiringsOnDetailPages,
336    #[serde(
337        rename = "disco-native-ads-support",
338        alias = "61ace69e-8397-432e-9d46-352a00263a7a"
339    )]
340    DiscoNativeAdsSupport,
341    #[serde(
342        rename = "disco-reported-issues",
343        alias = "6225c337-cd26-4ff0-b864-6c6dd84c9e0d"
344    )]
345    DiscoReportedIssues,
346    #[serde(
347        rename = "discover",
348        alias = "4a933f24-464d-4a6b-b372-9e4497abd361"
349    )]
350    Discover,
351    #[serde(
352        rename = "discover-genre-browsing",
353        alias = "2131d3dc-56c8-45d0-acec-c4683fd9a027"
354    )]
355    DiscoverGenreBrowsing,
356    #[serde(
357        rename = "discover-managed-related-vod",
358        alias = "cb0e4c75-b1cb-43e9-97ea-6b9bc66c717b"
359    )]
360    DiscoverManagedRelatedVod,
361    #[serde(
362        rename = "discover-managed-user-test",
363        alias = "807d9881-a846-40c3-8d54-84fc490b7ba9"
364    )]
365    DiscoverManagedUserTest,
366    #[serde(
367        rename = "discover-services-hub",
368        alias = "ba7c4a4f-a13b-4ec0-8eb2-cd0ba2fe77f8"
369    )]
370    DiscoverServicesHub,
371    #[serde(rename = "download_certificates")]
372    DownloadCertificates,
373    #[serde(
374        rename = "downloads-gating",
375        alias = "3bfd3ccf-8c63-4dbb-8f87-9b21b402c82b"
376    )]
377    DownloadsGating,
378    #[serde(
379        rename = "drm_support",
380        alias = "34e182bd-2f62-4678-a9e9-d13b3e25019d"
381    )]
382    DrmSupport,
383    #[serde(
384        rename = "dvr",
385        alias = "e8230c74-0940-4b91-9e20-6571eb068086"
386    )]
387    Dvr,
388    #[serde(
389        rename = "dvr-block-unsupported-countries",
390        alias = "c92d4903-bc06-4715-8ce4-4a22674abac8"
391    )]
392    DvrBlockUnsupportedCountries,
393    #[serde(
394        rename = "epg-recent-channels",
395        alias = "9c982beb-c676-4d6f-a777-ff5d37ec3081"
396    )]
397    EpgRecentChannels,
398    #[serde(
399        rename = "exclude restrictions",
400        alias = "6d7be725-9a96-42c7-8af4-01e735138822"
401    )]
402    ExcludeRestrictions,
403    #[serde(
404        rename = "federated-auth",
405        alias = "5d819d02-5d04-4116-8eec-f49def4e2d6f"
406    )]
407    FederatedAuth,
408    #[serde(
409        rename = "friend_request_push_notifications",
410        alias = "c36a6985-eee3-4400-a394-c5787fad15b5"
411    )]
412    FriendRequestPushNotifications,
413    #[serde(
414        rename = "global-continue-watching",
415        alias = "4742780c-af9d-4b44-bf5b-7b27e3369aa8"
416    )]
417    GlobalContinueWatching,
418    #[serde(
419        rename = "grandfather-sync",
420        alias = "7ee1495c-2798-4288-94e2-9cd98e67d441"
421    )]
422    GrandfatherSync,
423    #[serde(
424        rename = "guided-upgrade",
425        alias = "c9d9b7ee-fdd9-474e-b143-5039c04e9b9b"
426    )]
427    GuidedUpgrade,
428    #[serde(
429        rename = "hardware_transcoding",
430        alias = "bc8d1fca-deb0-4d0a-a6f4-12cfd681002d"
431    )]
432    HardwareTranscoding,
433    #[serde(
434        rename = "home",
435        alias = "b2403ac6-4885-4971-8b96-59353fd87c72"
436    )]
437    Home,
438    #[serde(
439        rename = "HRK_enable_EUR",
440        alias = "f1ac7a53-c524-4311-9a27-713562fc24fa"
441    )]
442    HrkEnableEur,
443    #[serde(
444        rename = "hwtranscode",
445        alias = "84a754b0-d1ca-4433-af2d-c949bf4b4936"
446    )]
447    Hwtranscode,
448    #[serde(
449        rename = "hybrid-guide",
450        alias = "c6ce2260-a19d-4fea-9f74-a52231f03924"
451    )]
452    HybridGuide,
453    #[serde(
454        rename = "imagga-v2",
455        alias = "55b9f6ed-5d26-4d2d-a436-68882a9901b5"
456    )]
457    ImaggaV2,
458    #[serde(
459        rename = "increase-password-complexity",
460        alias = "9e93f8a8-7ccd-4d15-99fa-76a158027660"
461    )]
462    IncreasePasswordComplexity,
463    #[serde(
464        rename = "intro-markers",
465        alias = "b83c8dc9-5a01-4b7a-a7c9-5870c8a6e21b"
466    )]
467    IntroMarkers,
468    #[serde(
469        rename = "ios14-privacy-banner",
470        alias = "39dbdd84-8339-4736-96a1-0eb105cc2e08"
471    )]
472    Ios14PrivacyBanner,
473    #[serde(
474        rename = "item_clusters",
475        alias = "b58d7f28-7b4a-49bb-97a7-152645505f28"
476    )]
477    ItemClusters,
478    #[serde(
479        rename = "iterable-notification-tokens",
480        alias = "81c8d5fa-8d90-4833-aa10-a31a51310e2f"
481    )]
482    IterableNotificationTokens,
483    #[serde(
484        rename = "join-discover-together",
485        alias = "f8f68869-07a5-4fc3-9359-d0b5ba9c487c"
486    )]
487    #[deprecated]
488    JoinDiscoverTogether,
489    #[serde(
490        rename = "join-discover-together-as-friend",
491        alias = "af866200-1116-4502-be15-f71457ce9d27"
492    )]
493    #[deprecated]
494    JoinDiscoverTogetherAsFriend,
495    #[serde(
496        rename = "keep-payment-method",
497        alias = "e4a9fd6f-4105-476b-bc57-adccd009323b"
498    )]
499    KeepPaymentMethod,
500    #[serde(
501        rename = "kevin-bacon",
502        alias = "c7ae6f8f-05e6-48bb-9024-c05c1dc3c43e"
503    )]
504    KevinBacon,
505    #[serde(
506        rename = "korea-consent",
507        alias = "cb151c05-1943-408a-b37c-06f7d409d6bb"
508    )]
509    #[deprecated]
510    KoreaConsent,
511    #[serde(
512        rename = "le_isrg_root_x1",
513        alias = "af291e9e-813f-4467-8779-5d215abc3b5f"
514    )]
515    LeIsrgRootX1,
516    #[serde(
517        rename = "lets_encrypt",
518        alias = "8536058d-e1dd-4ae7-b30f-e8b059b7cc17"
519    )]
520    LetsEncrypt,
521    #[serde(
522        rename = "lightning-dvr-pivot",
523        alias = "6b85840c-d79d-40c2-8d8f-dfc0b7d26776"
524    )]
525    LightningDvrPivot,
526    #[serde(
527        rename = "live-tv-channels-grid",
528        alias = "9eaa5152-320b-48e6-9d47-9492ba5e5b54"
529    )]
530    LiveTvChannelsGrid,
531    #[serde(
532        rename = "live-tv-grid-pagination",
533        alias = "d1b1e233-a891-45e5-935c-6114e905dbe8"
534    )]
535    LiveTvGridPagination,
536    #[serde(
537        rename = "live-tv-on-plex-subtitles",
538        alias = "0b8bf267-1acf-4f89-99eb-4afbb9d250e5"
539    )]
540    LiveTvOnPlexSubtitles,
541    #[serde(
542        rename = "live-tv-support-incomplete-segments",
543        alias = "dab501df-5d99-48ef-afc2-3e839e4ddc9a"
544    )]
545    LiveTvSupportIncompleteSegments,
546    #[serde(
547        rename = "livetv",
548        alias = "65685ff8-4375-4e4c-a806-ec1f0b4a8b7f"
549    )]
550    Livetv,
551    #[serde(
552        rename = "livetv-platform-specific",
553        alias = "de789b83-9c5e-4472-bccf-791c69e67500"
554    )]
555    LivetvPlatformSpecific,
556    #[serde(rename = "loudness")]
557    Loudness,
558    #[serde(
559        rename = "lyrics",
560        alias = "002c9f1a-2fc0-4812-b85b-0e6140f21a0f"
561    )]
562    Lyrics,
563    #[serde(
564        rename = "media-access-split-2",
565        alias = "7ab197ee-1bd6-4335-8f55-db827f0110ba"
566    )]
567    MediaAccessSplit2,
568    #[serde(
569        rename = "metadata",
570        alias = "f8ea4f37-c554-476a-8852-1cbd2912f3f6"
571    )]
572    Metadata,
573    #[serde(
574        rename = "metadata_search",
575        alias = "22b27e12-472e-4383-92ea-2ec3976d8e72"
576    )]
577    MetadataSearch,
578    #[serde(
579        rename = "music",
580        alias = "e7cea823-02e5-48c4-a501-d37b82bf132f"
581    )]
582    #[deprecated]
583    Music,
584    #[serde(
585        rename = "music-analysis",
586        alias = "8fd37970-6e4e-4f00-a64a-e70b52f18e94"
587    )]
588    MusicAnalysis,
589    #[serde(
590        rename = "music_preview",
591        alias = "8e8dd5c8-14a4-4208-97d4-623e09191774"
592    )]
593    #[deprecated]
594    MusicPreview,
595    #[serde(
596        rename = "music_videos",
597        alias = "1844737f-1a87-45c3-ab20-01435959e63c"
598    )]
599    MusicVideos,
600    #[serde(
601        rename = "new_plex_pass_prices",
602        alias = "de65add8-2782-4bb8-b156-e0b57a844479"
603    )]
604    NewPlexPassPrices,
605    #[serde(
606        rename = "news-provider-sunset-modal",
607        alias = "b77e6744-c18d-415a-8e7c-7aac5d7a7750"
608    )]
609    NewsProviderSunsetModal,
610    #[serde(
611        rename = "nominatim",
612        alias = "0de6151c-e0dd-47c8-a81e-1acb977c7f0f"
613    )]
614    Nominatim,
615    #[serde(
616        rename = "nonAnonymousAccount",
617        alias = "3dd35df0-3e4a-4e74-9ba8-2baeda83a733"
618    )]
619    NonAnonymousAccount,
620    #[serde(
621        rename = "onboarding-community",
622        alias = "5dc82bc9-6038-4c21-b752-bc3454773eda"
623    )]
624    OnboardingCommunity,
625    #[serde(
626        rename = "onboarding-promo-modal",
627        alias = "c0179bb9-b542-4afc-914e-63163f378485"
628    )]
629    #[deprecated]
630    OnboardingPromoModal,
631    #[serde(
632        rename = "optimize-server-users-endpoint",
633        alias = "ddd730e1-a0a0-429f-a7d3-7c5001d24497"
634    )]
635    #[deprecated]
636    OptimizeServerUsersEndpoint,
637    #[serde(
638        rename = "parental-controls",
639        alias = "73d0bba4-a6ba-4114-bac3-3039c12e08fb"
640    )]
641    ParentalControls,
642    #[serde(
643        rename = "pass",
644        alias = "82999dd3-a2be-482e-9f44-357879b4f603"
645    )]
646    Pass,
647    #[serde(
648        rename = "people-pages",
649        alias = "f4fe27db-7292-4e13-98b6-f3ff9b5ed5fe"
650    )]
651    PeoplePages,
652    #[serde(
653        rename = "people-pages-pms",
654        alias = "652968f4-d474-4e04-a1cf-2dd1eaeb488a"
655    )]
656    PeoplePagesPms,
657    #[serde(rename = "photo_autotags")]
658    PhotoAutotags,
659    #[serde(
660        rename = "photos-favorites",
661        alias = "96cac76e-c5bc-4596-87eb-4fdfef9aaa11"
662    )]
663    PhotosFavorites,
664    #[serde(
665        rename = "photos-metadata-edition",
666        alias = "2ea0e464-ea4f-4be2-97c1-ce6ed4b377dd"
667    )]
668    PhotosMetadataEdition,
669    #[serde(
670        rename = "photos-v5",
671        alias = "0a348865-4f87-46dc-8bb2-f37637975724"
672    )]
673    #[deprecated]
674    PhotosV5,
675    #[serde(
676        rename = "photosV6-edit",
677        alias = "850f3d1e-3f38-44c1-9c0c-e3c9127b8b5a"
678    )]
679    PhotosV6Edit,
680    #[serde(
681        rename = "photosV6-tv-albums",
682        alias = "3a2b0cb6-1519-4431-98e2-823c248c70eb"
683    )]
684    PhotosV6TvAlbums,
685    #[serde(
686        rename = "playback-speed",
687        alias = "068f4adf-43e5-4cc6-b5a1-1243e1be4c53"
688    )]
689    PlaybackSpeed,
690    #[serde(
691        rename = "played_badges",
692        alias = "02da2909-ddfd-46be-9e42-65008a79fc05"
693    )]
694    PlayedBadges,
695    #[serde(
696        rename = "plexpass_from_billing_context",
697        alias = "007fb90d-2224-4d24-bd42-e87ffde13558"
698    )]
699    PlexpassFromBillingContext,
700    #[serde(
701        rename = "pms_health",
702        alias = "9aea4ca5-2095-4619-9339-88c1e662fde6"
703    )]
704    PmsHealth,
705    #[serde(
706        rename = "PMS HEVC Encoding",
707        alias = "0e2acda2-d70d-4df6-96e0-f63cf264d217"
708    )]
709    PmsHevcEncoding,
710    #[serde(
711        rename = "podcasts",
712        alias = "1841971c-6be5-40e6-a211-7e189d767a78"
713    )]
714    Podcasts,
715    #[serde(
716        rename = "premium-dashboard",
717        alias = "222020fb-1504-492d-af33-a0b80a49558a"
718    )]
719    PremiumDashboard,
720    #[serde(
721        rename = "premium_music_metadata",
722        alias = "d413fb56-de7b-40e4-acd0-f3dbb7c9e104"
723    )]
724    PremiumMusicMetadata,
725    #[serde(
726        rename = "promoted-grid-channel-filters",
727        alias = "a0a78867-6b26-446f-9c3f-df4edf831259"
728    )]
729    PromotedGridChannelFilters,
730    #[serde(
731        rename = "radio",
732        alias = "300231e0-69aa-4dce-97f4-52d8c00e3e8c"
733    )]
734    Radio,
735    #[serde(
736        rename = "rate-limit-client-token",
737        alias = "3eb2789b-200c-4a15-91d2-dedfe560953c"
738    )]
739    RateLimitClientToken,
740    #[serde(
741        rename = "reactions_push_notifications_settings",
742        alias = "34ddfac9-3a76-459a-974d-591520b809dd"
743    )]
744    ReactionsPushNotificationsSettings,
745    #[serde(
746        rename = "redirect-subscription-to-account-page",
747        alias = "b8298a04-46a0-4f9c-ba1b-3b85a7d9f3b9"
748    )]
749    RedirectSubscriptionToAccountPage,
750    #[serde(
751        rename = "remote-watch-pass",
752        alias = "76ddd91e-8321-4916-94b6-ded8e3727a64"
753    )]
754    RemoteWatchPass,
755    #[serde(
756        rename = "remote-watch-pass-iap",
757        alias = "c9adefb7-30ea-4004-977d-ad2d1bc0a8ae"
758    )]
759    RemoteWatchPassIap,
760    #[serde(
761        rename = "require-plex-nonce",
762        alias = "0cce52a7-0778-4781-9a07-712370fb6b8a"
763    )]
764    #[deprecated]
765    RequirePlexNonce,
766    #[serde(
767        rename = "retro-games",
768        alias = "4e27cf82-9fb6-4ebe-8e10-c48bfe6fbbb6"
769    )]
770    #[deprecated]
771    RetroGames,
772    #[serde(
773        rename = "retro-games-plex-tv",
774        alias = "a4bc568b-477f-4f36-894b-49e19f34353f"
775    )]
776    #[deprecated]
777    RetroGamesPlexTv,
778    #[serde(
779        rename = "save-to-library",
780        alias = "644c4466-05fa-45e0-a478-c594cf81778f"
781    )]
782    SaveToLibrary,
783    #[serde(
784        rename = "scrobbling-service",
785        alias = "ccef9d3a-537a-43d9-8161-4c7113c6e2bb"
786    )]
787    ScrobblingService,
788    #[serde(
789        rename = "scrobbling-service-plex-tv",
790        alias = "7b392594-6949-4736-9894-e57a9dfe4037"
791    )]
792    ScrobblingServicePlexTv,
793    #[serde(rename = "server-manager")]
794    ServerManager,
795    #[serde(
796        rename = "session_bandwidth_restrictions",
797        alias = "05690239-443e-43fb-bc1a-95b5d916ca63"
798    )]
799    SessionBandwidthRestrictions,
800    #[serde(
801        rename = "session_kick",
802        alias = "4ca03b04-54c1-4f9f-aea2-f813ae48f317"
803    )]
804    SessionKick,
805    #[serde(rename = "shared-radio")]
806    SharedRadio,
807    #[serde(
808        rename = "shared_server_notification",
809        alias = "64adaa4e-aa7e-457d-b385-51438216d7fe"
810    )]
811    SharedServerNotification,
812    #[serde(
813        rename = "shared_source_notification",
814        alias = "6c4d66d9-729d-49dc-b70d-ab2652abf15a"
815    )]
816    SharedSourceNotification,
817    #[serde(
818        rename = "signin_notification",
819        alias = "1b3a63e4-c2f4-4011-a181-2343d3a97ef7"
820    )]
821    SigninNotification,
822    #[serde(
823        rename = "signin_with_apple",
824        alias = "b5874ecb-6610-47b2-8906-1b5a897acb02"
825    )]
826    SigninWithApple,
827    #[serde(
828        rename = "silence-removal",
829        alias = "a6e0a154-4735-4cbb-a6ec-7a0a146c8216"
830    )]
831    SilenceRemoval,
832    #[serde(
833        rename = "singleitemsharing",
834        alias = "62b1e357-5450-41d8-9b60-c7705f750849"
835    )]
836    Singleitemsharing,
837    #[serde(
838        rename = "skip-data-licensing-consent",
839        alias = "e5fe743c-af51-468a-b7e2-aabf0e79030c"
840    )]
841    SkipDataLicensingConsent,
842    #[serde(
843        rename = "sleep-timer",
844        alias = "c5adf9dc-af13-4a85-a24b-98de6fa2f595"
845    )]
846    SleepTimer,
847    #[serde(
848        rename = "sonos-client-feature",
849        alias = "8a9471c4-13bd-435a-b5b8-4ca6e423f355"
850    )]
851    SonosClientFeature,
852    #[serde(
853        rename = "spotlight-style-hub",
854        alias = "579156cf-0664-45b4-8b7b-dda400ac3e26"
855    )]
856    SpotlightStyleHub,
857    #[serde(
858        rename = "spring_serve_ad_provider",
859        alias = "fec722a0-a6d4-4fbd-96dc-4ffb02b072c5"
860    )]
861    SpringServeAdProvider,
862    #[serde(
863        rename = "Subtitles on Demand",
864        alias = "bb50c92f-b412-44fe-8d8a-b1684f212a44"
865    )]
866    SubtitlesOnDemand,
867    #[serde(
868        rename = "sweet-fades",
869        alias = "95149521-f64b-46ea-825c-9114e56afd2c"
870    )]
871    SweetFades,
872    #[serde(
873        rename = "sync",
874        alias = "9dc1df45-fb45-4be1-9ab2-eb23eb57f082"
875    )]
876    Sync,
877    #[serde(
878        rename = "Sync v3",
879        alias = "67c80530-eae3-4500-a9fa-9b6947d0f6d1"
880    )]
881    SyncV3,
882    #[serde(
883        rename = "trailers",
884        alias = "6380e085-02fe-43b5-8bff-380fa4f2423c"
885    )]
886    Trailers,
887    #[serde(
888        rename = "transcoder_cache",
889        alias = "a3d2d5c4-46a0-436e-a2d6-80d26f32b369"
890    )]
891    TranscoderCache,
892    #[serde(
893        rename = "TREBLE-show-features",
894        alias = "85ebfb7b-77fb-4afd-bb1a-2fe2fefdddbe"
895    )]
896    TrebleShowFeatures,
897    #[serde(
898        rename = "tunefind-clients",
899        alias = "07f804e6-28e6-4beb-b5c3-f2aefc88b938"
900    )]
901    #[deprecated]
902    TunefindClients,
903    #[serde(
904        rename = "tunefind-vod",
905        alias = "50a1cfe9-dac1-4722-aee8-cc22e9758dd6"
906    )]
907    TunefindVod,
908    #[serde(
909        rename = "tuner-sharing",
910        alias = "4b522f91-ae89-4f62-af9c-76f44d8ef61c"
911    )]
912    TunerSharing,
913    #[serde(
914        rename = "tvod",
915        alias = "9b5a4bea-3bbe-45d2-b226-00a6ef4d8e65"
916    )]
917    #[deprecated]
918    Tvod,
919    #[serde(
920        rename = "tvod_playback",
921        alias = "5d80b92d-4ecf-4b0b-935f-5efc907bb2c1"
922    )]
923    TvodPlayback,
924    #[serde(
925        rename = "tvod-rentals",
926        alias = "362c5ba7-41e8-400d-8354-18d53868e2d3"
927    )]
928    TvodRentals,
929    #[serde(
930        rename = "tvod-wtw",
931        alias = "e25d0e25-109e-4d6d-9a54-db0931af31c3"
932    )]
933    TvodWtw,
934    #[serde(
935        rename = "two-factor-authentication",
936        alias = "06d14b9e-2af8-4c2b-a4a1-ea9d5c515824"
937    )]
938    TwoFactorAuthentication,
939    #[serde(
940        rename = "two-factor-authentication-clients",
941        alias = "20824f5c-6dd9-4655-9970-e7701a73c02a"
942    )]
943    TwoFactorAuthenticationClients,
944    #[serde(
945        rename = "type-first",
946        alias = "d14556be-ae6d-4407-89d0-b83953f4789a"
947    )]
948    TypeFirst,
949    #[serde(
950        rename = "ultrablur",
951        alias = "cec2152f-321a-4c24-8c6d-c2b35a624389"
952    )]
953    Ultrablur,
954    #[serde(
955        rename = "universal-search",
956        alias = "8b46de05-1f96-4278-87b3-010ba5b1e386"
957    )]
958    UniversalSearch,
959    #[serde(
960        rename = "universal-search-live-tv",
961        alias = "cce9af5d-7b44-4119-a6b1-108fd0db725c"
962    )]
963    UniversalSearchLiveTv,
964    #[serde(
965        rename = "universal-search-new-quick-search",
966        alias = "b6b68f84-5127-4dc9-8a7e-3a04419b5cd4"
967    )]
968    UniversalSearchNewQuickSearch,
969    #[serde(
970        rename = "universal-watchlist",
971        alias = "d9528436-ee7c-42e3-ab7b-814f85ef74b4"
972    )]
973    UniversalWatchlist,
974    #[serde(
975        rename = "unsupportedtuners",
976        alias = "b46d16ae-cbd6-4226-8ee9-ab2b27e5dd42"
977    )]
978    Unsupportedtuners,
979    #[serde(
980        rename = "upgrade-3ds2",
981        alias = "547514ab-3284-46e5-af77-bbaff247e3fc"
982    )]
983    Upgrade3ds2,
984    #[serde(
985        rename = "user-profile-whats-new",
986        alias = "90138784-37a0-4a6b-87f6-1146d6c628e6"
987    )]
988    #[deprecated]
989    UserProfileWhatsNew,
990    #[serde(
991        rename = "users-and-sharing",
992        alias = "096ab4b8-04d2-41f4-9602-f1d5b9e8c7cc"
993    )]
994    UsersAndSharing,
995    #[serde(
996        rename = "visualizers",
997        alias = "1dd846ed-7cde-4dc5-8ef6-53d3ce8c4e9d"
998    )]
999    Visualizers,
1000    #[serde(
1001        rename = "vod",
1002        alias = "cc9bea3b-11ab-4402-a222-4958bb129cab"
1003    )]
1004    Vod,
1005    #[serde(
1006        rename = "vod_channels",
1007        alias = "5050545e-95c6-4a25-b94e-1fe5a5a603d0"
1008    )]
1009    #[deprecated]
1010    VodChannels,
1011    #[serde(
1012        rename = "vod_cloudflare",
1013        alias = "68747f3a-ce13-46ce-9274-1e0544c9f500"
1014    )]
1015    VodCloudflare,
1016    #[serde(
1017        rename = "vod-schema",
1018        alias = "1b870b8e-f1a7-497c-80b2-857d45f3123f"
1019    )]
1020    VodSchema,
1021    #[serde(
1022        rename = "vod_subtitles",
1023        alias = "ed374ad1-1d36-4396-8794-f710011e4fed"
1024    )]
1025    VodSubtitles,
1026    #[serde(
1027        rename = "volume-leveling",
1028        alias = "bbf73498-4912-4d80-9560-47c4fe212cec"
1029    )]
1030    VolumeLeveling,
1031    #[serde(
1032        rename = "watch-together-20200520",
1033        alias = "65faa2d0-f57e-4c63-a6b6-f1baa48951b1"
1034    )]
1035    WatchTogether20200520,
1036    #[serde(
1037        rename = "watch-together-invite",
1038        alias = "f83450e2-759a-4de4-8b31-e4a163896d43"
1039    )]
1040    WatchTogetherInvite,
1041    #[serde(
1042        rename = "watched-badges-v3",
1043        alias = "236de47b-a757-4ed7-9003-507b296057b5"
1044    )]
1045    WatchedBadgesV3,
1046    #[serde(
1047        rename = "watchlist",
1048        alias = "f0c452ce-11e7-465f-be04-5fb0bf4bec48"
1049    )]
1050    Watchlist,
1051    #[serde(
1052        rename = "watchlist-rss",
1053        alias = "f0f40559-a43a-4b8f-85ef-bdb1de1a912a"
1054    )]
1055    WatchlistRss,
1056    #[serde(
1057        rename = "watchlist-source",
1058        alias = "edd6039a-137c-4ace-b5d5-4e111ce9690b"
1059    )]
1060    WatchlistSource,
1061    #[serde(
1062        rename = "web-desktop-gracenote-banner",
1063        alias = "13056a62-9bd2-47cf-aba9-bab00095fd08"
1064    )]
1065    WebDesktopGracenoteBanner,
1066    #[serde(
1067        rename = "web-desktop-live-tv-chromecast-remote-player",
1068        alias = "b737075d-a6c5-4e8a-8ee9-7dc72d984062"
1069    )]
1070    WebDesktopLiveTvChromecastRemotePlayer,
1071    #[serde(
1072        rename = "web-desktop-v4-dvr-setup",
1073        alias = "f8484f94-92a8-4ca4-9f43-e83ab3f586c7"
1074    )]
1075    WebDesktopV4DvrSetup,
1076    #[serde(
1077        rename = "web-desktop-v4-home",
1078        alias = "29bca3b8-e40b-4c69-b71c-f88047240f9b"
1079    )]
1080    WebDesktopV4Home,
1081    #[serde(
1082        rename = "web-desktop-v4-pre-plays",
1083        alias = "591895c1-8c60-4eab-8096-3594bb190257"
1084    )]
1085    WebDesktopV4PrePlays,
1086    #[serde(
1087        rename = "web-log-viewer",
1088        alias = "740a75d2-6dba-4317-ba68-ed3d619d4c7a"
1089    )]
1090    WebLogViewer,
1091    #[serde(
1092        rename = "web_server_dashboard",
1093        alias = "5e2a89ec-fb26-4234-b66e-14d37f35dff2"
1094    )]
1095    WebServerDashboard,
1096    #[serde(
1097        rename = "web-share-v2",
1098        alias = "73c73f05-7131-41cd-86d7-b91301684bfe"
1099    )]
1100    WebShareV2,
1101    #[serde(
1102        rename = "webhooks",
1103        alias = "6f82ca43-6117-4e55-ae0e-5ea3b3e99a96"
1104    )]
1105    Webhooks,
1106    #[serde(
1107        rename = "webshows",
1108        alias = "55e1398c-930f-41c1-bead-f5c2e471bb25"
1109    )]
1110    Webshows,
1111    #[serde(
1112        rename = "where-to-watch-clients",
1113        alias = "e4f02866-841f-4ceb-a30c-0a0e68fb874d"
1114    )]
1115    WhereToWatchClients,
1116    UnknownUuid(String),
1117    #[cfg(not(feature = "tests_deny_unknown_fields"))]
1118    #[serde(other)]
1119    UnknownValue,
1120}
1121
1122impl ::std::str::FromStr for Feature {
1123    type Err = serde_plain::Error;
1124    fn from_str(s: &str) -> ::std::result::Result<Feature, Self::Err> {
1125        let span = trace_span!("Feature::deserialize");
1126        let _span_enter = span.enter();
1127
1128        let result = serde_plain::from_str(s);
1129
1130        #[cfg(not(feature = "tests_deny_unknown_fields"))]
1131        let is_unknown_value = matches!(result, Ok(Feature::UnknownValue));
1132        #[cfg(feature = "tests_deny_unknown_fields")]
1133        let is_unknown_value = result.is_err();
1134
1135        if is_unknown_value
1136            && s.len() == 36
1137            && s.as_bytes()[8] == b'-'
1138            && s.as_bytes()[13] == b'-'
1139            && s.as_bytes()[18] == b'-'
1140            && s.as_bytes()[23] == b'-'
1141        {
1142            return Ok(Feature::UnknownUuid(s.to_string()));
1143        }
1144
1145        result
1146    }
1147}
1148derive_display_from_serialize!(Feature);
1149
1150#[cfg(test)]
1151mod test {
1152    use crate::media_container::server::Feature;
1153    use std::str::FromStr;
1154
1155    #[cfg(not(feature = "tests_deny_unknown_fields"))]
1156    #[plex_api_test_helper::offline_test]
1157    fn test_unknown_feature() {
1158        let f = Feature::from_str("unknown_value").unwrap();
1159        assert_eq!(f, Feature::UnknownValue);
1160    }
1161
1162    #[plex_api_test_helper::offline_test]
1163    fn test_unknown_feature_uuid() {
1164        let f = Feature::from_str("cc9bea3b-aaaa-bbbb-cccc-4958bb129caa").unwrap();
1165        assert_eq!(
1166            f,
1167            Feature::UnknownUuid("cc9bea3b-aaaa-bbbb-cccc-4958bb129caa".to_owned())
1168        );
1169    }
1170
1171    #[plex_api_test_helper::offline_test]
1172    fn test_known_feature() {
1173        let f = Feature::from_str("webhooks").unwrap();
1174        assert_eq!(f, Feature::Webhooks);
1175
1176        let f = Feature::from_str("6f82ca43-6117-4e55-ae0e-5ea3b3e99a96").unwrap();
1177        assert_eq!(f, Feature::Webhooks);
1178    }
1179
1180    #[plex_api_test_helper::offline_test]
1181    fn test_known_deprecated_feature() {
1182        let f = Feature::from_str("optimize-server-users-endpoint").unwrap();
1183        assert_eq!(f, Feature::OptimizeServerUsersEndpoint);
1184
1185        let f = Feature::from_str("ddd730e1-a0a0-429f-a7d3-7c5001d24497").unwrap();
1186        assert_eq!(f, Feature::OptimizeServerUsersEndpoint);
1187    }
1188}