@@ -31,6 +31,7 @@ struct EventRequest {
3131 url : String ,
3232 referrer : Option < String > ,
3333 utm : Option < Utm > ,
34+ screen_width : Option < u32 > ,
3435}
3536
3637#[ derive( serde:: Deserialize , JsonSchema ) ]
@@ -42,6 +43,15 @@ struct Utm {
4243 term : Option < String > ,
4344}
4445
46+ fn screen_size_bucket ( width : u32 ) -> & ' static str {
47+ match width {
48+ 0 ..=767 => "mobile" ,
49+ 768 ..=1023 => "tablet" ,
50+ 1024 ..=2559 => "desktop" ,
51+ _ => "ultrawide" ,
52+ }
53+ }
54+
4555static EXISTING_ENTITIES : LazyLock < quick_cache:: sync:: Cache < String , ( ) > > =
4656 LazyLock :: new ( || quick_cache:: sync:: Cache :: new ( 512 ) ) ;
4757
@@ -131,8 +141,45 @@ fn process_event(
131141 utm_medium : event. utm . as_ref ( ) . and_then ( |u| u. medium . clone ( ) ) ,
132142 utm_source : event. utm . as_ref ( ) . and_then ( |u| u. source . clone ( ) ) ,
133143 utm_term : event. utm . as_ref ( ) . and_then ( |u| u. term . clone ( ) ) ,
144+ screen_size : event. screen_width . map ( |w| screen_size_bucket ( w) . to_string ( ) ) ,
134145 } ;
135146
136147 events. send ( event) ?;
137148 Ok ( ( ) )
138149}
150+
151+ #[ cfg( test) ]
152+ mod tests {
153+ use super :: screen_size_bucket;
154+
155+ #[ test]
156+ fn test_screen_size_bucket_mobile ( ) {
157+ assert_eq ! ( screen_size_bucket( 0 ) , "mobile" ) ;
158+ assert_eq ! ( screen_size_bucket( 375 ) , "mobile" ) ;
159+ assert_eq ! ( screen_size_bucket( 430 ) , "mobile" ) ;
160+ assert_eq ! ( screen_size_bucket( 767 ) , "mobile" ) ;
161+ }
162+
163+ #[ test]
164+ fn test_screen_size_bucket_tablet ( ) {
165+ assert_eq ! ( screen_size_bucket( 768 ) , "tablet" ) ;
166+ assert_eq ! ( screen_size_bucket( 810 ) , "tablet" ) ;
167+ assert_eq ! ( screen_size_bucket( 1023 ) , "tablet" ) ;
168+ }
169+
170+ #[ test]
171+ fn test_screen_size_bucket_desktop ( ) {
172+ assert_eq ! ( screen_size_bucket( 1024 ) , "desktop" ) ;
173+ assert_eq ! ( screen_size_bucket( 1280 ) , "desktop" ) ;
174+ assert_eq ! ( screen_size_bucket( 1920 ) , "desktop" ) ;
175+ assert_eq ! ( screen_size_bucket( 2559 ) , "desktop" ) ;
176+ }
177+
178+ #[ test]
179+ fn test_screen_size_bucket_ultrawide ( ) {
180+ assert_eq ! ( screen_size_bucket( 2560 ) , "ultrawide" ) ;
181+ assert_eq ! ( screen_size_bucket( 3440 ) , "ultrawide" ) ;
182+ assert_eq ! ( screen_size_bucket( 3840 ) , "ultrawide" ) ;
183+ assert_eq ! ( screen_size_bucket( 7680 ) , "ultrawide" ) ;
184+ }
185+ }
0 commit comments