@@ -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