diff options
Diffstat (limited to '')
| -rw-r--r-- | src/client/games/response.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/client/games/response.rs b/src/client/games/response.rs index 88df459..060ad44 100644 --- a/src/client/games/response.rs +++ b/src/client/games/response.rs | |||
| @@ -184,3 +184,23 @@ pub fn parse_crash_response(response: &str) -> Result<crate::crash::CrashState, | |||
| 184 | .ok_or_else(|| format!("Unexpected server response: {response}"))?; | 184 | .ok_or_else(|| format!("Unexpected server response: {response}"))?; |
| 185 | serde_json::from_str(raw).map_err(|error| format!("Invalid crash state: {error}")) | 185 | serde_json::from_str(raw).map_err(|error| format!("Invalid crash state: {error}")) |
| 186 | } | 186 | } |
| 187 | |||
| 188 | pub fn parse_history_response(response: &str) -> Result<Vec<crate::history::PlayRecord>, String> { | ||
| 189 | let response = response.trim(); | ||
| 190 | if response.is_empty() { | ||
| 191 | return Err("No response from server".to_string()); | ||
| 192 | } | ||
| 193 | if let Some(message) = response.strip_prefix("ERROR") { | ||
| 194 | let message = message.trim(); | ||
| 195 | return Err(if message.is_empty() { | ||
| 196 | "Server error".to_string() | ||
| 197 | } else { | ||
| 198 | message.to_string() | ||
| 199 | }); | ||
| 200 | } | ||
| 201 | |||
| 202 | let raw = response | ||
| 203 | .strip_prefix("HISTORY ") | ||
| 204 | .ok_or_else(|| format!("Unexpected server response: {response}"))?; | ||
| 205 | serde_json::from_str(raw).map_err(|error| format!("Invalid history: {error}")) | ||
| 206 | } | ||
