winget_types/installer/capability/
restricted.rs

1use core::{fmt, str::FromStr};
2
3use super::CapabilityError;
4
5#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
6pub enum RestrictedCapability {
7    AccessoryManager,
8    AllAppMods,
9    AllowElevation,
10    AppBroadcastServices,
11    AppCaptureServices,
12    AppCaptureSettings,
13    AppDiagnostics,
14    AppLicensing,
15    AppointmentsSystem,
16    AudioDeviceConfiguration,
17    BackgroundMediaRecording,
18    BackgroundSpatialPerception,
19    BackgroundVoIP,
20    BroadFileSystemAccess,
21    CameraProcessingExtension,
22    CellularDeviceControl,
23    CellularDeviceIdentity,
24    CellularMessaging,
25    ChatSystem,
26    ConfirmAppClose,
27    ContactsSystem,
28    CortanaPermissions,
29    CortanaSpeechAccessory,
30    CustomInstallActions,
31    DevelopmentModeNetwork,
32    DeviceManagementDmAccount,
33    DeviceManagementEmailAccount,
34    DeviceManagementFoundation,
35    DeviceManagementWapSecurityPolicies,
36    DevicePortalProvider,
37    DeviceUnlock,
38    DocumentsLibrary,
39    DualSimTiles,
40    Email,
41    EmailSystem,
42    EnterpriseAuthentication,
43    EnterpriseCloudSSO,
44    EnterpriseDataPolicy,
45    EnterpriseDeviceLockdown,
46    ExpandedResources,
47    ExtendedBackgroundTaskTime,
48    ExtendedExecutionBackgroundAudio,
49    ExtendedExecutionCritical,
50    ExtendedExecutionUnconstrained,
51    FirstSignInSettings,
52    GameBarServices,
53    GameList,
54    GameMonitor,
55    InputForegroundObservation,
56    InputInjectionBrokered,
57    InputObservation,
58    InputSuppression,
59    InteropServices,
60    LocalSystemServices,
61    LocationHistory,
62    LocationSystem,
63    ModifiableApp,
64    NetworkConnectionManagerProvisioning,
65    NetworkDataPlanProvisioning,
66    NetworkDataUsageManagement,
67    NetworkingVpnProvider,
68    OemDeployment,
69    OemPublicDirectory,
70    OneProcessVoIP,
71    PackagedServices,
72    PackageManagement,
73    PackagePolicySystem,
74    PackageQuery,
75    PackageWriteRedirectionCompatibilityShim,
76    PhoneCallHistory,
77    PhoneCallHistorySystem,
78    PhoneLineTransportManagement,
79    PreviewInkWorkspace,
80    PreviewPenWorkspace,
81    PreviewStore,
82    PreviewUiComposition,
83    ProtectedApp,
84    RemotePassportAuthentication,
85    RunFullTrust,
86    ScreenDuplication,
87    SecondaryAuthenticationFactor,
88    SecureAssessment,
89    SharedUserCertificates,
90    SlapiQueryLicenseValue,
91    SmBIOS,
92    SmsSend,
93    StartScreenManagement,
94    StoreLicenseManagement,
95    TargetedContent,
96    TeamEditionDeviceCredential,
97    TeamEditionExperience,
98    TeamEditionView,
99    UIAccess,
100    UiAutomation,
101    UnvirtualizedResources,
102    UserDataAccountsProvider,
103    UserDataSystem,
104    UserPrincipalName,
105    UserSystemId,
106    WalletSystem,
107    XboxAccessoryManagement,
108}
109
110impl AsRef<str> for RestrictedCapability {
111    #[inline]
112    fn as_ref(&self) -> &str {
113        self.as_str()
114    }
115}
116
117impl RestrictedCapability {
118    pub const MAX_LEN: usize = 40;
119
120    #[expect(clippy::too_many_lines, reason = "Necessary for an exhaustive match")]
121    #[must_use]
122    pub const fn as_str(self) -> &'static str {
123        match self {
124            Self::AccessoryManager => "accessoryManager",
125            Self::AllAppMods => "allAppMods",
126            Self::AllowElevation => "allowElevation",
127            Self::AppBroadcastServices => "appBroadcastServices",
128            Self::AppCaptureServices => "appCaptureServices",
129            Self::AppCaptureSettings => "appCaptureSettings",
130            Self::AppDiagnostics => "appDiagnostics",
131            Self::AppLicensing => "appLicensing",
132            Self::AppointmentsSystem => "appointmentsSystem",
133            Self::AudioDeviceConfiguration => "audioDeviceConfiguration",
134            Self::BackgroundMediaRecording => "backgroundMediaRecording",
135            Self::BackgroundSpatialPerception => "backgroundSpatialPerception",
136            Self::BackgroundVoIP => "backgroundVoIP",
137            Self::BroadFileSystemAccess => "broadFileSystemAccess",
138            Self::CameraProcessingExtension => "cameraProcessingExtension",
139            Self::CellularDeviceControl => "cellularDeviceControl",
140            Self::CellularDeviceIdentity => "cellularDeviceIdentity",
141            Self::CellularMessaging => "cellularMessaging",
142            Self::ChatSystem => "chatSystem",
143            Self::ConfirmAppClose => "confirmAppClose",
144            Self::ContactsSystem => "contactsSystem",
145            Self::CortanaPermissions => "cortanaPermissions",
146            Self::CortanaSpeechAccessory => "cortanaSpeechAccessory",
147            Self::CustomInstallActions => "customInstallActions",
148            Self::DevelopmentModeNetwork => "developmentModeNetwork",
149            Self::DeviceManagementDmAccount => "deviceManagementDmAccount",
150            Self::DeviceManagementEmailAccount => "deviceManagementEmailAccount",
151            Self::DeviceManagementFoundation => "deviceManagementFoundation",
152            Self::DeviceManagementWapSecurityPolicies => "deviceManagementWapSecurityPolicies",
153            Self::DevicePortalProvider => "devicePortalProvider",
154            Self::DeviceUnlock => "deviceUnlock",
155            Self::DocumentsLibrary => "documentsLibrary",
156            Self::DualSimTiles => "dualSimTiles",
157            Self::Email => "email",
158            Self::EmailSystem => "emailSystem",
159            Self::EnterpriseAuthentication => "enterpriseAuthentication",
160            Self::EnterpriseCloudSSO => "enterpriseCloudSSO",
161            Self::EnterpriseDataPolicy => "enterpriseDataPolicy",
162            Self::EnterpriseDeviceLockdown => "enterpriseDeviceLockdown",
163            Self::ExpandedResources => "expandedResources",
164            Self::ExtendedBackgroundTaskTime => "extendedBackgroundTaskTime",
165            Self::ExtendedExecutionBackgroundAudio => "extendedExecutionBackgroundAudio",
166            Self::ExtendedExecutionCritical => "extendedExecutionCritical",
167            Self::ExtendedExecutionUnconstrained => "extendedExecutionUnconstrained",
168            Self::FirstSignInSettings => "firstSignInSettings",
169            Self::GameBarServices => "gameBarServices",
170            Self::GameList => "gameList",
171            Self::GameMonitor => "gameMonitor",
172            Self::InputForegroundObservation => "inputForegroundObservation",
173            Self::InputInjectionBrokered => "inputInjectionBrokered",
174            Self::InputObservation => "inputObservation",
175            Self::InputSuppression => "inputSuppression",
176            Self::InteropServices => "interopServices",
177            Self::LocalSystemServices => "localSystemServices",
178            Self::LocationHistory => "locationHistory",
179            Self::LocationSystem => "locationSystem",
180            Self::ModifiableApp => "modifiableApp",
181            Self::NetworkConnectionManagerProvisioning => "networkConnectionManagerProvisioning",
182            Self::NetworkDataPlanProvisioning => "networkDataPlanProvisioning",
183            Self::NetworkDataUsageManagement => "networkDataUsageManagement",
184            Self::NetworkingVpnProvider => "networkingVpnProvider",
185            Self::OemDeployment => "oemDeployment",
186            Self::OemPublicDirectory => "oemPublicDirectory",
187            Self::OneProcessVoIP => "oneProcessVoIP",
188            Self::PackagedServices => "packagedServices",
189            Self::PackageManagement => "packageManagement",
190            Self::PackagePolicySystem => "packagePolicySystem",
191            Self::PackageQuery => "packageQuery",
192            Self::PackageWriteRedirectionCompatibilityShim => {
193                "packageWriteRedirectionCompatibilityShim"
194            }
195            Self::PhoneCallHistory => "phoneCallHistory",
196            Self::PhoneCallHistorySystem => "phoneCallHistorySystem",
197            Self::PhoneLineTransportManagement => "phoneLineTransportManagement",
198            Self::PreviewInkWorkspace => "previewInkWorkspace",
199            Self::PreviewPenWorkspace => "previewPenWorkspace",
200            Self::PreviewStore => "previewStore",
201            Self::PreviewUiComposition => "previewUiComposition",
202            Self::ProtectedApp => "protectedApp",
203            Self::RemotePassportAuthentication => "remotePassportAuthentication",
204            Self::RunFullTrust => "runFullTrust",
205            Self::ScreenDuplication => "screenDuplication",
206            Self::SecondaryAuthenticationFactor => "secondaryAuthenticationFactor",
207            Self::SecureAssessment => "secureAssessment",
208            Self::SharedUserCertificates => "sharedUserCertificates",
209            Self::SlapiQueryLicenseValue => "slapiQueryLicenseValue",
210            Self::SmBIOS => "smbios",
211            Self::SmsSend => "smsSend",
212            Self::StartScreenManagement => "startScreenManagement",
213            Self::StoreLicenseManagement => "storeLicenseManagement",
214            Self::TargetedContent => "targetedContent",
215            Self::TeamEditionDeviceCredential => "teamEditionDeviceCredential",
216            Self::TeamEditionExperience => "teamEditionExperience",
217            Self::TeamEditionView => "teamEditionView",
218            Self::UIAccess => "uiAccess",
219            Self::UiAutomation => "uiAutomation",
220            Self::UnvirtualizedResources => "unvirtualizedResources",
221            Self::UserDataAccountsProvider => "userDataAccountsProvider",
222            Self::UserDataSystem => "userDataSystem",
223            Self::UserPrincipalName => "userPrincipalName",
224            Self::UserSystemId => "userSystemId",
225            Self::WalletSystem => "walletSystem",
226            Self::XboxAccessoryManagement => "xboxAccessoryManagement",
227        }
228    }
229}
230
231impl fmt::Display for RestrictedCapability {
232    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
233        self.as_str().fmt(f)
234    }
235}
236
237impl FromStr for RestrictedCapability {
238    type Err = CapabilityError;
239
240    #[expect(
241        clippy::too_many_lines,
242        reason = "Necessary for an exhaustive from_str"
243    )]
244    fn from_str(s: &str) -> Result<Self, Self::Err> {
245        if s.is_empty() {
246            return Err(Self::Err::Empty);
247        }
248
249        match s {
250            "accessoryManager" => Ok(Self::AccessoryManager),
251            "allAppMods" => Ok(Self::AllAppMods),
252            "allowElevation" => Ok(Self::AllowElevation),
253            "appBroadcastServices" => Ok(Self::AppBroadcastServices),
254            "appCaptureServices" => Ok(Self::AppCaptureServices),
255            "appCaptureSettings" => Ok(Self::AppCaptureSettings),
256            "appDiagnostics" => Ok(Self::AppDiagnostics),
257            "appLicensing" => Ok(Self::AppLicensing),
258            "appointmentsSystem" => Ok(Self::AppointmentsSystem),
259            "audioDeviceConfiguration" => Ok(Self::AudioDeviceConfiguration),
260            "backgroundMediaRecording" => Ok(Self::BackgroundMediaRecording),
261            "backgroundSpatialPerception" => Ok(Self::BackgroundSpatialPerception),
262            "backgroundVoIP" => Ok(Self::BackgroundVoIP),
263            "broadFileSystemAccess" => Ok(Self::BroadFileSystemAccess),
264            "cameraProcessingExtension" => Ok(Self::CameraProcessingExtension),
265            "cellularDeviceControl" => Ok(Self::CellularDeviceControl),
266            "cellularDeviceIdentity" => Ok(Self::CellularDeviceIdentity),
267            "cellularMessaging" => Ok(Self::CellularMessaging),
268            "chatSystem" => Ok(Self::ChatSystem),
269            "confirmAppClose" => Ok(Self::ConfirmAppClose),
270            "contactsSystem" => Ok(Self::ContactsSystem),
271            "cortanaPermissions" => Ok(Self::CortanaPermissions),
272            "cortanaSpeechAccessory" => Ok(Self::CortanaSpeechAccessory),
273            "customInstallActions" => Ok(Self::CustomInstallActions),
274            "developmentModeNetwork" => Ok(Self::DevelopmentModeNetwork),
275            "deviceManagementDmAccount" => Ok(Self::DeviceManagementDmAccount),
276            "deviceManagementEmailAccount" => Ok(Self::DeviceManagementEmailAccount),
277            "deviceManagementFoundation" => Ok(Self::DeviceManagementFoundation),
278            "deviceManagementWapSecurityPolicies" => Ok(Self::DeviceManagementWapSecurityPolicies),
279            "devicePortalProvider" => Ok(Self::DevicePortalProvider),
280            "deviceUnlock" => Ok(Self::DeviceUnlock),
281            "documentsLibrary" => Ok(Self::DocumentsLibrary),
282            "dualSimTiles" => Ok(Self::DualSimTiles),
283            "email" => Ok(Self::Email),
284            "emailSystem" => Ok(Self::EmailSystem),
285            "enterpriseAuthentication" => Ok(Self::EnterpriseAuthentication),
286            "enterpriseCloudSSO" => Ok(Self::EnterpriseCloudSSO),
287            "enterpriseDataPolicy" => Ok(Self::EnterpriseDataPolicy),
288            "enterpriseDeviceLockdown" => Ok(Self::EnterpriseDeviceLockdown),
289            "expandedResources" => Ok(Self::ExpandedResources),
290            "extendedBackgroundTaskTime" => Ok(Self::ExtendedBackgroundTaskTime),
291            "extendedExecutionBackgroundAudio" => Ok(Self::ExtendedExecutionBackgroundAudio),
292            "extendedExecutionCritical" => Ok(Self::ExtendedExecutionCritical),
293            "extendedExecutionUnconstrained" => Ok(Self::ExtendedExecutionUnconstrained),
294            "firstSignInSettings" => Ok(Self::FirstSignInSettings),
295            "gameBarServices" => Ok(Self::GameBarServices),
296            "gameList" => Ok(Self::GameList),
297            "gameMonitor" => Ok(Self::GameMonitor),
298            "inputForegroundObservation" => Ok(Self::InputForegroundObservation),
299            "inputInjectionBrokered" => Ok(Self::InputInjectionBrokered),
300            "inputObservation" => Ok(Self::InputObservation),
301            "inputSuppression" => Ok(Self::InputSuppression),
302            "interopServices" => Ok(Self::InteropServices),
303            "localSystemServices" => Ok(Self::LocalSystemServices),
304            "locationHistory" => Ok(Self::LocationHistory),
305            "locationSystem" => Ok(Self::LocationSystem),
306            "modifiableApp" => Ok(Self::ModifiableApp),
307            "networkConnectionManagerProvisioning" => {
308                Ok(Self::NetworkConnectionManagerProvisioning)
309            }
310            "networkDataPlanProvisioning" => Ok(Self::NetworkDataPlanProvisioning),
311            "networkDataUsageManagement" => Ok(Self::NetworkDataUsageManagement),
312            "networkingVpnProvider" => Ok(Self::NetworkingVpnProvider),
313            "oemDeployment" => Ok(Self::OemDeployment),
314            "oemPublicDirectory" => Ok(Self::OemPublicDirectory),
315            "oneProcessVoIP" => Ok(Self::OneProcessVoIP),
316            "packagedServices" => Ok(Self::PackagedServices),
317            "packageManagement" => Ok(Self::PackageManagement),
318            "packagePolicySystem" => Ok(Self::PackagePolicySystem),
319            "packageQuery" => Ok(Self::PackageQuery),
320            "packageWriteRedirectionCompatibilityShim" => {
321                Ok(Self::PackageWriteRedirectionCompatibilityShim)
322            }
323            "phoneCallHistory" => Ok(Self::PhoneCallHistory),
324            "phoneCallHistorySystem" => Ok(Self::PhoneCallHistorySystem),
325            "phoneLineTransportManagement" => Ok(Self::PhoneLineTransportManagement),
326            "previewInkWorkspace" => Ok(Self::PreviewInkWorkspace),
327            "previewPenWorkspace" => Ok(Self::PreviewPenWorkspace),
328            "previewStore" => Ok(Self::PreviewStore),
329            "previewUiComposition" => Ok(Self::PreviewUiComposition),
330            "protectedApp" => Ok(Self::ProtectedApp),
331            "remotePassportAuthentication" => Ok(Self::RemotePassportAuthentication),
332            "runFullTrust" => Ok(Self::RunFullTrust),
333            "screenDuplication" => Ok(Self::ScreenDuplication),
334            "secondaryAuthenticationFactor" => Ok(Self::SecondaryAuthenticationFactor),
335            "secureAssessment" => Ok(Self::SecureAssessment),
336            "sharedUserCertificates" => Ok(Self::SharedUserCertificates),
337            "slapiQueryLicenseValue" => Ok(Self::SlapiQueryLicenseValue),
338            "smbios" => Ok(Self::SmBIOS),
339            "smsSend" => Ok(Self::SmsSend),
340            "startScreenManagement" => Ok(Self::StartScreenManagement),
341            "storeLicenseManagement" => Ok(Self::StoreLicenseManagement),
342            "targetedContent" => Ok(Self::TargetedContent),
343            "teamEditionDeviceCredential" => Ok(Self::TeamEditionDeviceCredential),
344            "teamEditionExperience" => Ok(Self::TeamEditionExperience),
345            "teamEditionView" => Ok(Self::TeamEditionView),
346            "uiAccess" => Ok(Self::UIAccess),
347            "uiAutomation" => Ok(Self::UiAutomation),
348            "unvirtualizedResources" => Ok(Self::UnvirtualizedResources),
349            "userDataAccountsProvider" => Ok(Self::UserDataAccountsProvider),
350            "userDataSystem" => Ok(Self::UserDataSystem),
351            "userPrincipalName" => Ok(Self::UserPrincipalName),
352            "userSystemId" => Ok(Self::UserSystemId),
353            "walletSystem" => Ok(Self::WalletSystem),
354            "xboxAccessoryManagement" => Ok(Self::XboxAccessoryManagement),
355            _ => Err(Self::Err::Unknown(
356                s.parse::<heapless::String<{ Self::MAX_LEN }>>()
357                    .map_err(|_| Self::Err::TooLong(s.len()))?,
358            )),
359        }
360    }
361}
362
363#[cfg(feature = "serde")]
364impl serde::Serialize for RestrictedCapability {
365    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
366    where
367        S: serde::Serializer,
368    {
369        self.as_str().serialize(serializer)
370    }
371}
372
373#[cfg(feature = "serde")]
374impl<'de> serde::Deserialize<'de> for RestrictedCapability {
375    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
376    where
377        D: serde::Deserializer<'de>,
378    {
379        struct RestrictedCapabilityVisitor;
380
381        impl serde::de::Visitor<'_> for RestrictedCapabilityVisitor {
382            type Value = RestrictedCapability;
383
384            fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
385                formatter.write_str("a restricted capability string")
386            }
387
388            fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
389            where
390                E: serde::de::Error,
391            {
392                value.parse::<Self::Value>().map_err(E::custom)
393            }
394
395            fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
396            where
397                E: serde::de::Error,
398            {
399                let utf8 = core::str::from_utf8(value).map_err(E::custom)?;
400                self.visit_str(utf8)
401            }
402        }
403
404        deserializer.deserialize_str(RestrictedCapabilityVisitor)
405    }
406}
407
408#[cfg(test)]
409mod tests {
410    use rstest::rstest;
411
412    use super::{CapabilityError, RestrictedCapability};
413
414    #[rstest]
415    #[case("enterpriseAuthentication")]
416    #[case("enterpriseDataPolicy")]
417    #[case("sharedUserCertificates")]
418    #[case("documentsLibrary")]
419    #[case("appCaptureSettings")]
420    #[case("cellularDeviceControl")]
421    #[case("cellularDeviceIdentity")]
422    #[case("cellularMessaging")]
423    #[case("deviceUnlock")]
424    #[case("dualSimTiles")]
425    #[case("enterpriseDeviceLockdown")]
426    #[case("inputInjectionBrokered")]
427    #[case("inputObservation")]
428    #[case("inputSuppression")]
429    #[case("networkingVpnProvider")]
430    #[case("packageManagement")]
431    #[case("packageQuery")]
432    #[case("screenDuplication")]
433    #[case("userPrincipalName")]
434    #[case("walletSystem")]
435    #[case("locationHistory")]
436    #[case("confirmAppClose")]
437    #[case("phoneCallHistory")]
438    #[case("appointmentsSystem")]
439    #[case("chatSystem")]
440    #[case("contactsSystem")]
441    #[case("email")]
442    #[case("emailSystem")]
443    #[case("phoneCallHistorySystem")]
444    #[case("smsSend")]
445    #[case("userDataSystem")]
446    #[case("previewStore")]
447    #[case("firstSignInSettings")]
448    #[case("teamEditionExperience")]
449    #[case("remotePassportAuthentication")]
450    #[case("previewUiComposition")]
451    #[case("secureAssessment")]
452    #[case("networkConnectionManagerProvisioning")]
453    #[case("networkDataPlanProvisioning")]
454    #[case("slapiQueryLicenseValue")]
455    #[case("extendedBackgroundTaskTime")]
456    #[case("extendedExecutionBackgroundAudio")]
457    #[case("extendedExecutionCritical")]
458    #[case("extendedExecutionUnconstrained")]
459    #[case("deviceManagementDmAccount")]
460    #[case("deviceManagementFoundation")]
461    #[case("deviceManagementWapSecurityPolicies")]
462    #[case("deviceManagementEmailAccount")]
463    #[case("packagePolicySystem")]
464    #[case("gameList")]
465    #[case("xboxAccessoryManagement")]
466    #[case("cortanaSpeechAccessory")]
467    #[case("accessoryManager")]
468    #[case("interopServices")]
469    #[case("inputForegroundObservation")]
470    #[case("oemDeployment")]
471    #[case("oemPublicDirectory")]
472    #[case("appLicensing")]
473    #[case("locationSystem")]
474    #[case("userDataAccountsProvider")]
475    #[case("previewPenWorkspace")]
476    #[case("secondaryAuthenticationFactor")]
477    #[case("storeLicenseManagement")]
478    #[case("userSystemId")]
479    #[case("targetedContent")]
480    #[case("uiAutomation")]
481    #[case("gameBarServices")]
482    #[case("appCaptureServices")]
483    #[case("appBroadcastServices")]
484    #[case("audioDeviceConfiguration")]
485    #[case("backgroundMediaRecording")]
486    #[case("previewInkWorkspace")]
487    #[case("startScreenManagement")]
488    #[case("cortanaPermissions")]
489    #[case("allAppMods")]
490    #[case("expandedResources")]
491    #[case("protectedApp")]
492    #[case("gameMonitor")]
493    #[case("appDiagnostics")]
494    #[case("devicePortalProvider")]
495    #[case("enterpriseCloudSSO")]
496    #[case("backgroundVoIP")]
497    #[case("oneProcessVoIP")]
498    #[case("developmentModeNetwork")]
499    #[case("broadFileSystemAccess")]
500    #[case("smbios")]
501    #[case("runFullTrust")]
502    #[case("allowElevation")]
503    #[case("teamEditionDeviceCredential")]
504    #[case("teamEditionView")]
505    #[case("cameraProcessingExtension")]
506    #[case("networkDataUsageManagement")]
507    #[case("phoneLineTransportManagement")]
508    #[case("unvirtualizedResources")]
509    #[case("modifiableApp")]
510    #[case("packageWriteRedirectionCompatibilityShim")]
511    #[case("customInstallActions")]
512    #[case("packagedServices")]
513    #[case("localSystemServices")]
514    #[case("backgroundSpatialPerception")]
515    #[case("uiAccess")]
516    fn valid_restricted_capability(#[case] restricted_capability: &str) {
517        assert!(
518            restricted_capability
519                .parse::<RestrictedCapability>()
520                .is_ok()
521        );
522    }
523
524    #[test]
525    fn invalid_restricted_capability() {
526        assert_eq!(
527            "".parse::<RestrictedCapability>().err(),
528            Some(CapabilityError::Empty)
529        );
530    }
531}