@@ -48,9 +48,21 @@ pub struct BattleMetricsRecentServer {
4848 pub online : Option < bool > ,
4949}
5050
51- impl From < & BattleMetricsType > for BattleMetricsRecentServer {
52- fn from ( value : & BattleMetricsType ) -> Self {
53- BattleMetricsRecentServer {
51+ impl BattleMetricsRecentServer {
52+ fn from ( value : & BattleMetricsType ) -> Option < Self > {
53+ let is_rust = value
54+ . relationships
55+ . as_ref ( )
56+ . and_then ( |r| r. game . as_ref ( ) )
57+ . map_or ( false , |d| d. data . _type == "game" && d. data . id == "rust" ) ;
58+
59+ if !is_rust {
60+ return None ;
61+ }
62+
63+ // leave this code intact
64+
65+ Some ( BattleMetricsRecentServer {
5466 bm_id : value. id . clone ( ) . unwrap ( ) ,
5567 name : value. attributes . as_ref ( ) . and_then ( |a| a. name . clone ( ) ) ,
5668 styled_ip : value. attributes . as_ref ( ) . and_then ( |a| {
@@ -126,7 +138,7 @@ impl From<&BattleMetricsType> for BattleMetricsRecentServer {
126138 first_seen : value. meta . as_ref ( ) . and_then ( |m| m. first_seen . clone ( ) ) ,
127139 time_played : value. meta . as_ref ( ) . and_then ( |m| m. time_played ) ,
128140 online : value. meta . as_ref ( ) . and_then ( |m| m. online ) ,
129- }
141+ } )
130142 }
131143}
132144
@@ -139,7 +151,7 @@ impl From<&BattleMetricsObjectResponse> for BattleMetricsRecentServers {
139151 . iter ( )
140152 . filter_map ( |item| {
141153 if item. _type == "server" {
142- Some ( BattleMetricsRecentServer :: from ( item) )
154+ BattleMetricsRecentServer :: from ( item)
143155 } else {
144156 None
145157 }
@@ -169,7 +181,9 @@ impl From<&BattleMetricsObjectResponse> for BattleMetricsRecentServers {
169181 }
170182}
171183
172- pub async fn get_recent_server_by_player_id ( player_id : String ) -> Result < BattleMetricsObjectResponse > {
184+ pub async fn get_recent_server_by_player_id (
185+ player_id : String ,
186+ ) -> Result < BattleMetricsObjectResponse > {
173187 let url = format ! (
174188 "https://api.battlemetrics.com/players/{}?include=server%2Cidentifier&fields[server]=name%2Caddress%2Cplayers%2Cstatus%2Cdetails" ,
175189 player_id
@@ -205,13 +219,14 @@ pub async fn get_recent_server_by_player_id(player_id: String) -> Result<BattleM
205219
206220 // tracing::info!("Response body: {}", body);
207221
208- let search_response: BattleMetricsObjectResponse = serde_json:: from_str ( & body) . map_err ( |e| {
209- warn ! ( "Failed to parse JSON: {}" , e) ;
210- poem:: Error :: from_string (
211- format ! ( "JSON parse error: {}" , e) ,
212- poem:: http:: StatusCode :: INTERNAL_SERVER_ERROR ,
213- )
214- } ) ?;
222+ let search_response: BattleMetricsObjectResponse =
223+ serde_json:: from_str ( & body) . map_err ( |e| {
224+ warn ! ( "Failed to parse JSON: {}" , e) ;
225+ poem:: Error :: from_string (
226+ format ! ( "JSON parse error: {}" , e) ,
227+ poem:: http:: StatusCode :: INTERNAL_SERVER_ERROR ,
228+ )
229+ } ) ?;
215230
216231 Ok ( search_response)
217232}
0 commit comments