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}