History

feat: `Permissions::check_opt()` for those who don't need an error case. (#450)

Sebastian Thiel committed 4 years ago

Commit 515e5211 parent ac3823d2 files · +27 −0Browse files

Unified · Split

2 files
  1. git-sec/src/permission.rs +9 −0
  2. git-sec/tests/sec.rs +18 −0
git-sec/src/permission.rs+9−0
@@ -28,6 +28,15 @@ impl Permission { · 27 unmodified lines
28 }),28 }),
29 }29 }
30 }30 }
31
32 /// Like [`check()`][Self::check()], but degenerates the type to an option to make it more useful in cases where
33 /// `Forbid` shoudn't abort the entire operation.
34 pub fn check_opt<R: std::fmt::Debug>(&self, resource: R) -> Option<R> {
35 match self {
36 Permission::Allow => Some(resource),
37 Permission::Deny | Permission::Forbid => None,
38 }
39 }
31}40}
32 41
33impl Display for Permission {42impl Display for Permission {
git-sec/tests/sec.rs+18−0
@@ -9,4 +9,22 @@ mod trust { · 8 unmodified lines
9 }9 }
10}10}
11 11
12mod permission {
13 use git_sec::Permission;
14
15 #[test]
16 fn check() {
17 assert_eq!(Permission::Allow.check("hi").unwrap(), Some("hi"));
18 assert_eq!(Permission::Deny.check("hi").unwrap(), None);
19 assert!(Permission::Forbid.check("hi").is_err());
20 }
21
22 #[test]
23 fn check_opt() {
24 assert_eq!(Permission::Allow.check_opt("hi"), Some("hi"));
25 assert_eq!(Permission::Deny.check_opt("hi"), None);
26 assert_eq!(Permission::Forbid.check_opt("hi"), None);
27 }
28}
29
12mod identity;30mod identity;