@@ -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 , TeamMember , Teams } ;
6+ use rust_team_data:: v1:: { BASE_URL , People , Person , Team , TeamKind , TeamMember , Teams } ;
77use serde:: Serialize ;
88use std:: cmp:: Reverse ;
99use std:: collections:: HashMap ;
@@ -49,17 +49,20 @@ pub fn encode_zulip_stream(
4949}
5050
5151#[ derive( Debug , Clone ) ]
52- pub struct RustTeams {
52+ pub struct RustTeamData {
5353 pub teams : Vec < Team > ,
5454 pub archived_teams : Vec < Team > ,
55+ // GitHub username => person data
56+ pub people : HashMap < String , Person > ,
5557}
5658
57- impl RustTeams {
59+ impl RustTeamData {
5860 #[ cfg( test) ]
5961 fn dummy ( teams : Vec < Team > ) -> Self {
60- RustTeams {
62+ RustTeamData {
6163 teams,
6264 archived_teams : vec ! [ ] ,
65+ people : HashMap :: new ( ) ,
6366 }
6467 }
6568
@@ -277,16 +280,21 @@ impl RustTeams {
277280
278281 fn add_team (
279282 people : & mut HashMap < String , PersonData > ,
280- ctx : & RustTeams ,
283+ ctx : & RustTeamData ,
281284 member : & TeamMember ,
282285 team : & Team ,
283286 mode : TeamMode ,
284287 ) {
288+ let person_team_data = ctx
289+ . people
290+ . get ( & member. github )
291+ . unwrap_or_else ( || panic ! ( "Person {} not found in people.json" , member. github) ) ;
285292 let person = people
286293 . entry ( member. github . clone ( ) )
287294 . or_insert_with ( move || PersonData {
288295 name : member. name . clone ( ) ,
289296 github : member. github . clone ( ) ,
297+ github_sponsors : person_team_data. github_sponsors ,
290298 active_teams : vec ! [ ] ,
291299 alumni_teams : vec ! [ ] ,
292300 } ) ;
@@ -463,15 +471,16 @@ impl PersonTeam {
463471pub struct PersonData {
464472 name : String ,
465473 pub github : String ,
474+ github_sponsors : bool ,
466475 active_teams : Vec < PersonTeam > ,
467476 alumni_teams : Vec < PersonTeam > ,
468477}
469478
470- pub fn load_rust_teams ( ) -> anyhow:: Result < RustTeams > {
479+ pub fn load_rust_teams ( ) -> anyhow:: Result < RustTeamData > {
471480 println ! ( "Downloading Team API data" ) ;
472481
473482 // Parallelize the download to make website build faster
474- let ( teams, archived_teams) = std:: thread:: scope ( |scope| {
483+ let ( teams, archived_teams, people ) = std:: thread:: scope ( |scope| {
475484 let teams = scope. spawn ( || -> anyhow:: Result < Teams > {
476485 let response = fetch ( & format ! ( "{BASE_URL}/teams.json" ) ) ?;
477486 Ok ( serde_json:: from_str ( & response) ?)
@@ -480,13 +489,22 @@ pub fn load_rust_teams() -> anyhow::Result<RustTeams> {
480489 let response = fetch ( & format ! ( "{BASE_URL}/archived-teams.json" ) ) ?;
481490 Ok ( serde_json:: from_str ( & response) ?)
482491 } ) ;
483- ( teams. join ( ) . unwrap ( ) , archived_teams. join ( ) . unwrap ( ) )
492+ let people = scope. spawn ( || -> anyhow:: Result < People > {
493+ let response = fetch ( & format ! ( "{BASE_URL}/people.json" ) ) ?;
494+ Ok ( serde_json:: from_str ( & response) ?)
495+ } ) ;
496+ (
497+ teams. join ( ) . unwrap ( ) ,
498+ archived_teams. join ( ) . unwrap ( ) ,
499+ people. join ( ) . unwrap ( ) ,
500+ )
484501 } ) ;
485- let ( teams, archived_teams) = ( teams?, archived_teams?) ;
502+ let ( teams, archived_teams, people ) = ( teams?, archived_teams? , people ?) ;
486503
487- Ok ( RustTeams {
504+ Ok ( RustTeamData {
488505 teams : teams. teams . into_values ( ) . collect ( ) ,
489506 archived_teams : archived_teams. teams . into_values ( ) . collect ( ) ,
507+ people : people. people . into_iter ( ) . collect ( ) ,
490508 } )
491509}
492510
@@ -517,7 +535,7 @@ impl fmt::Display for TeamNotFound {
517535
518536#[ cfg( test) ]
519537mod tests {
520- use super :: { RustTeams , TeamNotFound } ;
538+ use super :: { RustTeamData , TeamNotFound } ;
521539 use rust_team_data:: v1:: { Team , TeamKind , TeamMember , TeamWebsite } ;
522540
523541 fn dummy_team ( name : & str ) -> Team {
@@ -569,7 +587,7 @@ mod tests {
569587 fn test_index_data ( ) {
570588 let mut foo = dummy_team ( "foo" ) ;
571589 foo. kind = TeamKind :: WorkingGroup ;
572- let data = RustTeams :: dummy ( vec ! [ foo, dummy_team( "bar" ) ] ) ;
590+ let data = RustTeamData :: dummy ( vec ! [ foo, dummy_team( "bar" ) ] ) ;
573591
574592 let res = data. index_data ( ) ;
575593 assert_eq ! ( res. teams. len( ) , 1 ) ;
@@ -581,7 +599,7 @@ mod tests {
581599 fn test_index_subteams_are_hidden ( ) {
582600 let mut foo = dummy_team ( "foo" ) ;
583601 foo. subteam_of = Some ( String :: new ( ) ) ;
584- let data = RustTeams :: dummy ( vec ! [ foo] ) ;
602+ let data = RustTeamData :: dummy ( vec ! [ foo] ) ;
585603
586604 assert_eq ! ( data. index_data( ) . teams. len( ) , 0 ) ;
587605 }
@@ -606,7 +624,7 @@ mod tests {
606624 other_wg. subteam_of = Some ( "other" . into ( ) ) ;
607625 other_wg. kind = TeamKind :: WorkingGroup ;
608626
609- let data = RustTeams :: dummy ( vec ! [
627+ let data = RustTeamData :: dummy ( vec ! [
610628 main,
611629 subteam,
612630 subteam2,
@@ -635,7 +653,7 @@ mod tests {
635653 let foo = dummy_team ( "foo" ) ;
636654 let mut bar = dummy_team ( "bar" ) ;
637655 bar. kind = TeamKind :: WorkingGroup ;
638- let data = RustTeams :: dummy ( vec ! [ foo, bar] ) ;
656+ let data = RustTeamData :: dummy ( vec ! [ foo, bar] ) ;
639657
640658 assert ! (
641659 data. clone( )
@@ -663,7 +681,7 @@ mod tests {
663681 fn test_subteams_cant_be_loaded ( ) {
664682 let mut foo = dummy_team ( "foo" ) ;
665683 foo. subteam_of = Some ( "bar" . into ( ) ) ;
666- let data = RustTeams :: dummy ( vec ! [ foo, dummy_team( "bar" ) ] ) ;
684+ let data = RustTeamData :: dummy ( vec ! [ foo, dummy_team( "bar" ) ] ) ;
667685
668686 assert ! (
669687 data. page_data( "teams" , "foo" )
0 commit comments