Skip to content

Commit 7c0bdc0

Browse files
committed
Introduce rust verification
1 parent 9d207b5 commit 7c0bdc0

File tree

2 files changed

+32
-13
lines changed

2 files changed

+32
-13
lines changed

app/src/models/bm/core.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,16 @@ pub struct BattleMetricsRelationshipIdentifier {
6262

6363
#[derive(Debug, Serialize, Deserialize)]
6464
pub struct BattleMetricsRelationships {
65+
#[serde(skip_serializing_if = "Option::is_none")]
66+
pub game: Option<BattleMetricsRelationshipData>,
6567
#[serde(skip_serializing_if = "Option::is_none")]
6668
pub server: Option<BattleMetricsRelationshipData>,
6769
#[serde(skip_serializing_if = "Option::is_none")]
6870
pub player: Option<BattleMetricsRelationshipData>,
6971
#[serde(skip_serializing_if = "Option::is_none")]
7072
pub organizations: Option<BattleMetricsRelationshipData>,
73+
#[serde(skip_serializing_if = "Option::is_none")]
74+
pub extra: Option<serde_json::Value>,
7175
}
7276

7377
#[derive(Debug, Serialize, Deserialize)]

app/src/models/bm/recent.rs

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)