@@ -3,7 +3,7 @@ use handlebars::{
33    Context ,  Handlebars ,  Helper ,  HelperResult ,  Output ,  RenderContext ,  RenderErrorReason , 
44} ; 
55use  percent_encoding:: { AsciiSet ,  NON_ALPHANUMERIC ,  utf8_percent_encode} ; 
6- use  rust_team_data:: v1:: { BASE_URL ,  Team ,  TeamKind ,  Teams } ; 
6+ use  rust_team_data:: v1:: { BASE_URL ,  Team ,  TeamKind ,  TeamMember ,   Teams } ; 
77use  serde:: Serialize ; 
88use  std:: cmp:: Reverse ; 
99use  std:: collections:: HashMap ; 
@@ -204,6 +204,36 @@ impl RustTeams {
204204
205205        ArchivedTeams  {  teams } 
206206    } 
207+ 
208+     pub  fn  all_team_members ( & self )  -> AllTeamMembers  { 
209+         let  mut  alumni = HashMap :: new ( ) ; 
210+         let  mut  active = HashMap :: new ( ) ; 
211+         for  team in  & self . archived_teams  { 
212+             alumni. extend ( team. members . iter ( ) . map ( |m| ( m. github_id ,  m) ) ) ; 
213+             alumni. extend ( team. alumni . iter ( ) . map ( |m| ( m. github_id ,  m) ) ) ; 
214+         } 
215+         for  team in  & self . teams  { 
216+             if  team. name  != "alumni"  { 
217+                 alumni. extend ( team. alumni . iter ( ) . map ( |m| ( m. github_id ,  m) ) ) ; 
218+                 active. extend ( team. members . iter ( ) . map ( |m| ( m. github_id ,  m) ) ) ; 
219+             } 
220+         } 
221+ 
222+         alumni. retain ( |id,  _| !active. contains_key ( id) ) ; 
223+ 
224+         let  alumni = { 
225+             let  mut  alumni = alumni. into_values ( ) . cloned ( ) . collect :: < Vec < TeamMember > > ( ) ; 
226+             alumni. sort_by_key ( |m| m. name . clone ( ) ) ; 
227+             alumni
228+         } ; 
229+         let  active = { 
230+             let  mut  active = active. into_values ( ) . cloned ( ) . collect :: < Vec < TeamMember > > ( ) ; 
231+             active. sort_by_key ( |m| m. name . clone ( ) ) ; 
232+             active
233+         } ; 
234+ 
235+         AllTeamMembers  {  active,  alumni } 
236+     } 
207237} 
208238
209239#[ derive( Serialize ) ]  
@@ -236,6 +266,12 @@ pub struct ArchivedTeams {
236266    teams :  Vec < Team > , 
237267} 
238268
269+ #[ derive( Serialize ) ]  
270+ pub  struct  AllTeamMembers  { 
271+     active :  Vec < TeamMember > , 
272+     alumni :  Vec < TeamMember > , 
273+ } 
274+ 
239275pub  fn  load_rust_teams ( )  -> anyhow:: Result < RustTeams >  { 
240276    println ! ( "Downloading Team API data" ) ; 
241277
0 commit comments