diff --git a/jwt-authorizer/src/claims.rs b/jwt-authorizer/src/claims.rs index bc827c8..95ce022 100644 --- a/jwt-authorizer/src/claims.rs +++ b/jwt-authorizer/src/claims.rs @@ -19,6 +19,15 @@ pub enum OneOrArray { Array(Vec), } +impl OneOrArray { + pub fn iter<'a>(&'a self) -> Box + 'a> { + match self { + OneOrArray::One(v) => Box::new(std::iter::once(v)), + OneOrArray::Array(vector) => Box::new(vector.iter()), + } + } +} + /// Claims mentioned in the JWT specifications. /// /// https://www.rfc-editor.org/rfc/rfc7519#section-4.1 @@ -47,6 +56,23 @@ mod tests { v: OneOrArray, } + #[test] + fn one_or_array_iter() { + let o = OneOrArray::One("aaa".to_owned()); + let mut i = o.iter(); + assert_eq!(Some(&"aaa".to_owned()), i.next()); + + let a = OneOrArray::Array(vec!["aaa".to_owned()]); + let mut i = a.iter(); + assert_eq!(Some(&"aaa".to_owned()), i.next()); + + let a = OneOrArray::Array(vec!["aaa".to_owned(), "bbb".to_owned()]); + let mut i = a.iter(); + assert_eq!(Some(&"aaa".to_owned()), i.next()); + assert_eq!(Some(&"bbb".to_owned()), i.next()); + assert_eq!(None, i.next()); + } + #[test] fn rfc_claims_aud() { let a: TestStruct = serde_json::from_str(r#"{"v":"a"}"#).unwrap();