@@ -2,18 +2,12 @@ use crate::models::{Submission, UserLanguageCount, UserLanguageCountRank, UserPr
2
2
use crate :: { PgPool , MAX_INSERT_ROWS } ;
3
3
use anyhow:: Result ;
4
4
use async_trait:: async_trait;
5
+ use regex:: Regex ;
5
6
use sqlx:: postgres:: PgRow ;
6
7
use sqlx:: Row ;
7
8
use std:: collections:: { BTreeMap , BTreeSet } ;
8
9
use std:: ops:: Range ;
9
10
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
-
17
11
#[ async_trait]
18
12
pub trait LanguageCountClient {
19
13
async fn update_language_count (
@@ -42,6 +36,7 @@ impl LanguageCountClient for PgPool {
42
36
submissions : & [ Submission ] ,
43
37
current_counts : & [ UserLanguageCount ] ,
44
38
) -> Result < ( ) > {
39
+ let mut simplified_languages = BTreeMap :: new ( ) ;
45
40
let mut language_count = submissions
46
41
. iter ( )
47
42
. map ( |s| {
@@ -54,8 +49,10 @@ impl LanguageCountClient for PgPool {
54
49
. fold (
55
50
BTreeMap :: new ( ) ,
56
51
|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 ( ) ) )
59
56
. or_insert_with ( BTreeSet :: new)
60
57
. insert ( problem_id) ;
61
58
map
@@ -196,7 +193,7 @@ impl LanguageCountClient for PgPool {
196
193
}
197
194
198
195
fn simplify_language ( lang : & str ) -> String {
199
- let re = regex ! ( r"\d*\s*\(.*\)" ) ;
196
+ let re = Regex :: new ( r"\d*\s*\(.*\)" ) . unwrap ( ) ;
200
197
if lang. starts_with ( "Perl6" ) {
201
198
"Raku" . to_string ( )
202
199
} else {
0 commit comments