@@ -2,18 +2,12 @@ use crate::models::{Submission, UserLanguageCount, UserLanguageCountRank, UserPr
22use crate :: { PgPool , MAX_INSERT_ROWS } ;
33use anyhow:: Result ;
44use async_trait:: async_trait;
5+ use regex:: Regex ;
56use sqlx:: postgres:: PgRow ;
67use sqlx:: Row ;
78use std:: collections:: { BTreeMap , BTreeSet } ;
89use std:: ops:: Range ;
910
10- macro_rules! regex {
11- ( $re: literal $( , ) ?) => { {
12- static RE : once_cell:: sync:: OnceCell <regex:: Regex > = once_cell:: sync:: OnceCell :: new( ) ;
13- RE . get_or_init( || regex:: Regex :: new( $re) . unwrap( ) )
14- } } ;
15- }
16-
1711#[ async_trait]
1812pub trait LanguageCountClient {
1913 async fn update_language_count (
@@ -42,6 +36,7 @@ impl LanguageCountClient for PgPool {
4236 submissions : & [ Submission ] ,
4337 current_counts : & [ UserLanguageCount ] ,
4438 ) -> Result < ( ) > {
39+ let mut simplified_languages = BTreeMap :: new ( ) ;
4540 let mut language_count = submissions
4641 . iter ( )
4742 . map ( |s| {
@@ -54,8 +49,10 @@ impl LanguageCountClient for PgPool {
5449 . fold (
5550 BTreeMap :: new ( ) ,
5651 |mut map, ( user_id, problem_id, language) | {
57- let simplified_language = simplify_language ( language) ;
58- map. entry ( ( user_id, simplified_language) )
52+ let simplified_language = simplified_languages
53+ . entry ( language)
54+ . or_insert_with ( || simplify_language ( language) ) ;
55+ map. entry ( ( user_id, simplified_language. to_string ( ) ) )
5956 . or_insert_with ( BTreeSet :: new)
6057 . insert ( problem_id) ;
6158 map
@@ -196,7 +193,7 @@ impl LanguageCountClient for PgPool {
196193}
197194
198195fn simplify_language ( lang : & str ) -> String {
199- let re = regex ! ( r"\d*\s*\(.*\)" ) ;
196+ let re = Regex :: new ( r"\d*\s*\(.*\)" ) . unwrap ( ) ;
200197 if lang. starts_with ( "Perl6" ) {
201198 "Raku" . to_string ( )
202199 } else {
0 commit comments