@@ -51,32 +51,40 @@ impl Snapshot {
51
51
self
52
52
}
53
53
54
- /// Transform our acceleration structure into a list of entries.
54
+ /// Transform our acceleration structure into an iterator of entries.
55
55
///
56
56
/// Note that the order is different from how they were obtained initially, and are explicitly ordered by
57
57
/// (`old_email`, `old_name`).
58
- pub fn entries ( & self ) -> Vec < crate :: Entry < ' _ > > {
59
- let mut out = Vec :: with_capacity ( self . entries_by_old_email . len ( ) ) ;
60
- for entry in & self . entries_by_old_email {
61
- if entry. new_email . is_some ( ) || entry. new_name . is_some ( ) {
62
- out. push ( crate :: Entry {
58
+ pub fn iter ( & self ) -> impl Iterator < Item = crate :: Entry < ' _ > > {
59
+ self . entries_by_old_email . iter ( ) . flat_map ( |entry| {
60
+ let initial = if entry. new_email . is_some ( ) || entry. new_name . is_some ( ) {
61
+ Some ( crate :: Entry {
63
62
new_name : entry. new_name . as_ref ( ) . map ( |b| b. as_bstr ( ) ) ,
64
63
new_email : entry. new_email . as_ref ( ) . map ( |b| b. as_bstr ( ) ) ,
65
64
old_name : None ,
66
65
old_email : entry. old_email . as_bstr ( ) ,
67
- } ) ;
68
- }
66
+ } )
67
+ } else {
68
+ None
69
+ } ;
69
70
70
- for name_entry in & entry. entries_by_old_name {
71
- out. push ( crate :: Entry {
72
- new_name : name_entry. new_name . as_ref ( ) . map ( |b| b. as_bstr ( ) ) ,
73
- new_email : name_entry. new_email . as_ref ( ) . map ( |b| b. as_bstr ( ) ) ,
74
- old_name : name_entry. old_name . as_bstr ( ) . into ( ) ,
75
- old_email : entry. old_email . as_bstr ( ) ,
76
- } ) ;
77
- }
78
- }
79
- out
71
+ let rest = entry. entries_by_old_name . iter ( ) . map ( |name_entry| crate :: Entry {
72
+ new_name : name_entry. new_name . as_ref ( ) . map ( |b| b. as_bstr ( ) ) ,
73
+ new_email : name_entry. new_email . as_ref ( ) . map ( |b| b. as_bstr ( ) ) ,
74
+ old_name : name_entry. old_name . as_bstr ( ) . into ( ) ,
75
+ old_email : entry. old_email . as_bstr ( ) ,
76
+ } ) ;
77
+
78
+ initial. into_iter ( ) . chain ( rest)
79
+ } )
80
+ }
81
+
82
+ /// Transform our acceleration structure into a list of entries.
83
+ ///
84
+ /// Note that the order is different from how they were obtained initially, and are explicitly ordered by
85
+ /// (`old_email`, `old_name`).
86
+ pub fn entries ( & self ) -> Vec < crate :: Entry < ' _ > > {
87
+ self . iter ( ) . collect ( )
80
88
}
81
89
82
90
/// Try to resolve `signature` by its contained email and name and provide resolved/mapped names as reference.
0 commit comments