diff --git a/src/private_server/mod.rs b/src/private_server/mod.rs index 60af510..07397d5 100644 --- a/src/private_server/mod.rs +++ b/src/private_server/mod.rs @@ -147,7 +147,7 @@ pub async fn best( let mut query_param = BASE64_URL_SAFE_NO_PAD.encode(serde_json::to_string(&options)?); query_param.push_str("=="); // Maximum padding, as otherwise python screams at me - let decoded = ctx + let bytes = ctx .http_client .get(format!("{url}/api/v1/users/{}/best", private_user_id)) .query(&[("query", query_param)]) @@ -157,17 +157,21 @@ pub async fn best( .context("Failed to send request")? .error_for_status() .context("Request has non-ok status")? - .json::<PrivateServerResult<RawBestScores>>() + .bytes() .await + .context("Failed to get body bytes")?; + + let decoded = serde_json::from_slice::<PrivateServerResult<RawBestScores>>(&bytes) .context("Failed to decode response")?; let decoded = if let (true, MaybeData::SomeData(inner)) = (decoded.code == 0, &decoded.data) { inner } else { return Err(anyhow!( - "The server returned an error: \"{}\". Full response:\n```\n{:?}\n```", + "The server returned an error: \"{}\". Full response:\n```\n{:?}\n``` \nRaw response:\n```\n{}\n```", &decoded.msg, - &decoded + &decoded, + String::from_utf8_lossy(&bytes) ) .tag(ErrorKind::Internal)); }; @@ -222,7 +226,7 @@ pub async fn users( let mut query_param = BASE64_URL_SAFE_NO_PAD.encode(serde_json::to_string(&options)?); query_param.push_str("=="); // Maximum padding, as otherwise python screams at me - let decoded = ctx + let bytes = ctx .http_client .get(format!("{url}/api/v1/users")) .query(&[("query", query_param)]) @@ -232,17 +236,21 @@ pub async fn users( .context("Failed to send request")? .error_for_status() .context("Request has non-ok status")? - .json::<PrivateServerResult<Vec<RawUser>>>() + .bytes() .await + .context("Failed to get body bytes")?; + + let decoded = serde_json::from_slice::<PrivateServerResult<Vec<RawUser>>>(&bytes) .context("Failed to decode response")?; let decoded = if let (true, MaybeData::SomeData(inner)) = (decoded.code == 0, &decoded.data) { inner } else { return Err(anyhow!( - "The server returned an error: \"{}\". Full response:\n```\n{:?}\n```", + "The server returned an error: \"{}\". Full response:\n```\n{:?}\n``` \nRaw response:\n```\n{}\n```", &decoded.msg, - &decoded + &decoded, + String::from_utf8_lossy(&bytes) ) .tag(ErrorKind::Internal)); };