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
2828 }),
2929 }
3030 }
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+ }
3140 }
3241
3342 impl Display for Permission {
git-sec/tests/sec.rs+18−0
@@ -9,4 +9,22 @@ mod trust { · 8 unmodified lines
99 }
1010 }
1111
12+mod 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+
1230 mod identity;