1- use std:: { collections:: { HashMap , HashSet } , iter:: FromIterator } ;
1+ use std:: {
2+ collections:: { HashMap , HashSet } ,
3+ iter:: FromIterator ,
4+ } ;
25
36use bindle:: { Invoice , Parcel } ;
47
@@ -45,30 +48,34 @@ impl InvoiceUnderstander {
4548 pub fn classify_parcel ( & self , parcel : & Parcel ) -> Option < InterestingParcel > {
4649 // Currently only handlers but we have talked of scheduled tasks etc.
4750 parcel. label . feature . as_ref ( ) . and_then ( |features| {
48- features. get ( "wagi" ) . and_then ( |wagi_features| {
49- match wagi_features. get ( "route" ) {
51+ features
52+ . get ( "wagi" )
53+ . and_then ( |wagi_features| match wagi_features. get ( "route" ) {
5054 Some ( route) => {
5155 let handler_info = WagiHandlerInfo {
5256 invoice_id : self . id ( ) ,
5357 parcel : parcel. clone ( ) ,
5458 route : route. to_owned ( ) ,
5559 entrypoint : wagi_features. get ( "entrypoint" ) . map ( |s| s. to_owned ( ) ) ,
5660 allowed_hosts : wagi_features. get ( "allowed_hosts" ) . map ( |h| parse_csv ( h) ) ,
57- required_parcels : parcels_required_for ( parcel, & self . group_dependency_map ) ,
61+ required_parcels : parcels_required_for (
62+ parcel,
63+ & self . group_dependency_map ,
64+ ) ,
5865 } ;
5966 Some ( InterestingParcel :: WagiHandler ( handler_info) )
60- } ,
67+ }
6168 None => None ,
62- }
63- } )
69+ } )
6470 } )
6571 }
6672
6773 pub fn parse_wagi_handlers ( & self ) -> Vec < WagiHandlerInfo > {
68- self
69- . top_modules ( ) . iter ( )
74+ self . top_modules ( )
75+ . iter ( )
7076 . filter_map ( |parcel| self . classify_parcel ( parcel) )
71- . map ( |parcel| match parcel { // If there are other cases of InterestingParcel this may need to become a filter_map, but right now that makes Clippy mad
77+ . map ( |parcel| match parcel {
78+ // If there are other cases of InterestingParcel this may need to become a filter_map, but right now that makes Clippy mad
7279 InterestingParcel :: WagiHandler ( h) => h,
7380 } )
7481 . collect ( )
@@ -91,27 +98,45 @@ pub struct WagiHandlerInfo {
9198
9299impl WagiHandlerInfo {
93100 pub fn asset_parcels ( & self ) -> Vec < Parcel > {
94- self . required_parcels . iter ( ) . filter ( |p| is_file ( p) ) . cloned ( ) . collect ( )
101+ self . required_parcels
102+ . iter ( )
103+ . filter ( |p| is_file ( p) )
104+ . cloned ( )
105+ . collect ( )
95106 }
96107}
97108
98109const NO_PARCELS : Vec < Parcel > = vec ! [ ] ;
99110
100111pub fn is_file ( parcel : & Parcel ) -> bool {
101- parcel. label . feature . as_ref ( ) . and_then ( |features| {
102- features. get ( "wagi" ) . map ( |wagi_features| {
103- match wagi_features. get ( "file" ) {
104- Some ( s) => s == "true" ,
105- _ => false ,
106- }
112+ parcel
113+ . label
114+ . feature
115+ . as_ref ( )
116+ . and_then ( |features| {
117+ features
118+ . get ( "wagi" )
119+ . map ( |wagi_features| match wagi_features. get ( "file" ) {
120+ Some ( s) => s == "true" ,
121+ _ => false ,
122+ } )
107123 } )
108- } ) . unwrap_or ( false )
124+ . unwrap_or ( false )
109125}
110126
111- pub fn parcels_required_for ( parcel : & Parcel , full_dep_map : & HashMap < String , Vec < Parcel > > ) -> Vec < Parcel > {
127+ pub fn parcels_required_for (
128+ parcel : & Parcel ,
129+ full_dep_map : & HashMap < String , Vec < Parcel > > ,
130+ ) -> Vec < Parcel > {
112131 let mut required = HashSet :: new ( ) ;
113132 for group in parcel. directly_requires ( ) {
114- required. extend ( full_dep_map. get ( & group) . unwrap_or ( & NO_PARCELS ) . iter ( ) . cloned ( ) ) ;
133+ required. extend (
134+ full_dep_map
135+ . get ( & group)
136+ . unwrap_or ( & NO_PARCELS )
137+ . iter ( )
138+ . cloned ( ) ,
139+ ) ;
115140 }
116141 Vec :: from_iter ( required)
117142}
@@ -142,25 +167,39 @@ pub fn build_full_memberships(invoice: &Invoice) -> HashMap<String, Vec<Parcel>>
142167 for group in direct_memberships. keys ( ) {
143168 let mut all_members = HashSet :: new ( ) ;
144169 for dep_group in gg_deps. get ( group) . unwrap ( ) {
145- all_members. extend ( direct_memberships. get ( dep_group) . unwrap_or ( & NO_PARCELS ) . iter ( ) . cloned ( ) ) ;
170+ all_members. extend (
171+ direct_memberships
172+ . get ( dep_group)
173+ . unwrap_or ( & NO_PARCELS )
174+ . iter ( )
175+ . cloned ( ) ,
176+ ) ;
146177 }
147178 full_memberships. insert ( group. to_owned ( ) , Vec :: from_iter ( all_members) ) ;
148179 }
149180
150181 full_memberships
151182}
152183
153- fn group_to_group_direct_dependencies ( direct_memberships : & HashMap < String , Vec < Parcel > > ) -> HashMap < String , Vec < String > > {
184+ fn group_to_group_direct_dependencies (
185+ direct_memberships : & HashMap < String , Vec < Parcel > > ,
186+ ) -> HashMap < String , Vec < String > > {
154187 let mut ggd = HashMap :: new ( ) ;
155188 for ( group, members) in direct_memberships {
156- let mut directs: Vec < _ > = members. iter ( ) . flat_map ( |parcel| parcel. directly_requires ( ) ) . collect ( ) ;
189+ let mut directs: Vec < _ > = members
190+ . iter ( )
191+ . flat_map ( |parcel| parcel. directly_requires ( ) )
192+ . collect ( ) ;
157193 directs. push ( group. to_owned ( ) ) ;
158194 ggd. insert ( group. to_owned ( ) , directs) ;
159195 }
160196 ggd
161197}
162198
163- fn direct_deps_not_already_in_list ( list : & [ String ] , direct_dep_map : & HashMap < String , Vec < String > > ) -> Vec < String > {
199+ fn direct_deps_not_already_in_list (
200+ list : & [ String ] ,
201+ direct_dep_map : & HashMap < String , Vec < String > > ,
202+ ) -> Vec < String > {
164203 let mut new_dds = vec ! [ ] ;
165204 for group in list {
166205 if let Some ( child_groups) = direct_dep_map. get ( group) {
@@ -172,7 +211,9 @@ fn direct_deps_not_already_in_list(list: &[String], direct_dep_map: &HashMap<Str
172211 HashSet :: < String > :: from_iter ( new_dds) . into_iter ( ) . collect ( )
173212}
174213
175- fn group_to_group_full_dependencies ( direct_memberships : & HashMap < String , Vec < Parcel > > ) -> HashMap < String , Vec < String > > {
214+ fn group_to_group_full_dependencies (
215+ direct_memberships : & HashMap < String , Vec < Parcel > > ,
216+ ) -> HashMap < String , Vec < String > > {
176217 let mut ggd = HashMap :: new ( ) ;
177218 let direct_deps = group_to_group_direct_dependencies ( direct_memberships) ;
178219 for ( group, directs) in & direct_deps {
@@ -208,7 +249,7 @@ impl ParcelUtils for Parcel {
208249}
209250
210251fn parse_csv ( text : & str ) -> Vec < String > {
211- text. split ( ',' ) . map ( |v| v. to_owned ( ) ) . collect ( ) // TODO: trim etc.?
252+ text. split ( ',' ) . map ( |v| v. to_owned ( ) ) . collect ( ) // TODO: trim etc.?
212253}
213254
214255#[ cfg( test) ]
@@ -394,7 +435,9 @@ mod test {
394435 } ;
395436
396437 let membership_map = build_full_memberships ( & inv) ;
397- let members = membership_map. get ( "coffee" ) . expect ( "there should have been a group called 'coffee'" ) ;
438+ let members = membership_map
439+ . get ( "coffee" )
440+ . expect ( "there should have been a group called 'coffee'" ) ;
398441 assert_eq ! ( 2 , members. len( ) ) ;
399442 }
400443}
0 commit comments