Merge pull request #386 from frewsxcv/general-names

Implement `iter` method on `GeneralNames`.
This commit is contained in:
Steven Fackler 2016-04-30 21:29:26 -07:00
commit 5c1c89b0e2
2 changed files with 39 additions and 0 deletions

View File

@ -810,6 +810,32 @@ impl<'a> GeneralNames<'a> {
}
}
}
pub fn iter(&self) -> GeneralNamesIter {
GeneralNamesIter {
names: self,
idx: 0
}
}
}
pub struct GeneralNamesIter<'a> {
names: &'a GeneralNames<'a>,
idx: usize,
}
impl<'a> Iterator for GeneralNamesIter<'a> {
type Item = GeneralName<'a>;
fn next(&mut self) -> Option<Self::Item> {
if self.idx < self.names.len() {
let name = self.names.get(self.idx);
self.idx += 1;
Some(name)
} else {
None
}
}
}
pub struct GeneralName<'a> {

View File

@ -169,3 +169,16 @@ fn test_subject_alt_name() {
assert_eq!(subject_alt_names.get(1).ipadd(), Some(&[127, 0, 0, 1][..]));
assert_eq!(subject_alt_names.get(2).ipadd(), Some(&b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01"[..]));
}
#[test]
fn test_subject_alt_name_iter() {
let mut file = File::open("test/alt_name_cert.pem").unwrap();
let cert = X509::from_pem(&mut file).unwrap();
let subject_alt_names = cert.subject_alt_names().unwrap();
let mut subject_alt_names_iter = subject_alt_names.iter();
assert_eq!(subject_alt_names_iter.next().unwrap().dns(), Some("foobar.com"));
assert_eq!(subject_alt_names_iter.next().unwrap().ipadd(), Some(&[127, 0, 0, 1][..]));
assert_eq!(subject_alt_names_iter.next().unwrap().ipadd(), Some(&b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01"[..]));
assert!(subject_alt_names_iter.next().is_none());
}