@@ -90,7 +90,7 @@ impl RustTeams {
9090 let teams = self . teams . clone ( ) ;
9191
9292 // Find the main team first
93- let main_team = teams
93+ let mut main_team = teams
9494 . iter ( )
9595 . filter ( |team| {
9696 team. website_data . as_ref ( ) . map ( |ws| ws. page . as_str ( ) ) == Some ( team_page_name)
@@ -181,6 +181,41 @@ impl RustTeams {
181181 }
182182 }
183183
184+ fn sort_members ( members : & mut [ TeamMember ] ) {
185+ members. sort_by_key ( |member| member. github . to_lowercase ( ) ) ;
186+ members. sort_by ( |a, b| {
187+ // First, sort by lead status (lead before non-lead)
188+ if a. is_lead != b. is_lead {
189+ b. is_lead . cmp ( & a. is_lead )
190+ } else if a. roles . len ( ) != b. roles . len ( ) {
191+ // Then by role count (more roles before less roles)
192+ b. roles . cmp ( & a. roles )
193+ } else {
194+ // Then by the role contents
195+ // If there is no role, will return equal, and thus use the original GitHub username
196+ // ordering
197+ a. roles . cmp ( & b. roles )
198+ }
199+ } ) ;
200+ }
201+
202+ fn sort_team_members ( team : & mut Team ) {
203+ sort_members ( & mut team. members ) ;
204+ sort_members ( & mut team. alumni ) ;
205+ }
206+
207+ fn sort_teams ( teams : & mut [ Team ] ) {
208+ for team in teams {
209+ sort_team_members ( team) ;
210+ }
211+ }
212+
213+ sort_team_members ( & mut main_team) ;
214+ sort_teams ( & mut subteams) ;
215+ sort_teams ( & mut wgs) ;
216+ sort_teams ( & mut project_groups) ;
217+ sort_teams ( & mut other_teams) ;
218+
184219 Ok ( PageData {
185220 team : main_team,
186221 zulip_domain : crate :: ZULIP_DOMAIN ,
0 commit comments