From 003ca8eb6b435e641db15ba7856d6f0c3bc10eaa Mon Sep 17 00:00:00 2001 From: rozodru Date: Sun, 20 Jul 2025 16:28:24 -0400 Subject: [PATCH] I broke something and then I fixed it but not sure whatI did so...here ya go --- src/api/client.rs | 14 +++++++++++--- src/api/types.rs | 11 +++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/api/client.rs b/src/api/client.rs index 1b406d9..efd75eb 100644 --- a/src/api/client.rs +++ b/src/api/client.rs @@ -45,7 +45,9 @@ impl MastodonClient { let response = req.send().await?; if !response.status().is_success() { - return Err(anyhow!("API request failed: {}", response.status())); + let status = response.status(); + let body = response.text().await.unwrap_or_else(|_| "Failed to read response body".to_string()); + return Err(anyhow!("API request failed: {} - {}", status, body)); } Ok(response) @@ -173,7 +175,10 @@ impl MastodonClient { } let response = self.get(&endpoint).await?; - let statuses: Vec = response.json().await?; + let response_text = response.text().await?; + + let statuses: Vec = serde_json::from_str(&response_text) + .map_err(|e| anyhow!("Failed to parse home timeline JSON: {} - Response: {}", e, &response_text[..std::cmp::min(500, response_text.len())]))?; Ok(statuses) } @@ -195,7 +200,10 @@ impl MastodonClient { } let response = self.get(&endpoint).await?; - let statuses: Vec = response.json().await?; + let response_text = response.text().await?; + + let statuses: Vec = serde_json::from_str(&response_text) + .map_err(|e| anyhow!("Failed to parse public timeline JSON: {} - Response: {}", e, &response_text[..std::cmp::min(500, response_text.len())]))?; Ok(statuses) } diff --git a/src/api/types.rs b/src/api/types.rs index fde56cf..c30889b 100644 --- a/src/api/types.rs +++ b/src/api/types.rs @@ -7,9 +7,12 @@ pub struct Account { pub username: String, pub acct: String, pub display_name: String, + #[serde(default)] pub locked: bool, + #[serde(default)] pub bot: bool, pub discoverable: Option, + #[serde(default)] pub group: bool, pub created_at: DateTime, pub note: String, @@ -18,8 +21,11 @@ pub struct Account { pub avatar_static: String, pub header: String, pub header_static: String, + #[serde(default)] pub followers_count: u64, + #[serde(default)] pub following_count: u64, + #[serde(default)] pub statuses_count: u64, pub last_status_at: Option, pub source: Option, @@ -50,14 +56,19 @@ pub struct Status { pub created_at: DateTime, pub in_reply_to_id: Option, pub in_reply_to_account_id: Option, + #[serde(default)] pub sensitive: bool, + #[serde(default)] pub spoiler_text: String, pub visibility: Visibility, pub language: Option, pub uri: String, pub url: Option, + #[serde(default)] pub replies_count: u64, + #[serde(default)] pub reblogs_count: u64, + #[serde(default)] pub favourites_count: u64, pub edited_at: Option>, pub favourited: Option,