commit 799c3db15832316cd75854b4a80f39b243da3eb6
parent 4b0566a5e8dd0ba2c284f2cc5fd006a0773373d0
Author: Silas Brack <silasbrack@gmail.com>
Date: Sat, 25 Apr 2026 11:20:57 +0200
fix: correct TrailBase API filter syntax and response handling
- Remove 'filter=' prefix from query params
- Handle both cursor and total_count in responses
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat:
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/trailbase.rs b/src/trailbase.rs
@@ -25,8 +25,12 @@ pub struct SearchResult {
#[derive(Debug, Deserialize)]
struct ListResponse<T> {
records: Vec<T>,
+ #[serde(default)]
#[allow(dead_code)]
cursor: Option<String>,
+ #[serde(default)]
+ #[allow(dead_code)]
+ total_count: Option<i64>,
}
#[derive(Debug, Serialize)]
@@ -118,7 +122,7 @@ impl TrailbaseClient {
_max_published_time: &str,
) -> Result<Vec<NewsItem>, ClientError> {
let url = format!(
- "{}/api/records/v1/news_item_category?filter=category_id={}",
+ "{}/api/records/v1/news_item_category?category_id={}",
self.base_url, category_id
);
let response: ListResponse<serde_json::Value> = self.get_json(&url).await?;
@@ -139,7 +143,7 @@ impl TrailbaseClient {
.collect::<Vec<_>>()
.join(",");
let url = format!(
- "{}/api/records/v1/news_item?filter={}&limit={}&offset={}&order=-published",
+ "{}/api/records/v1/news_item?{}&limit={}&offset={}&order=-published",
self.base_url, ids_filter, limit, offset
);
let response: ListResponse<NewsItem> = self.get_json(&url).await?;
@@ -160,7 +164,7 @@ impl TrailbaseClient {
news_item_id: i64,
) -> Result<Vec<Category>, ClientError> {
let url = format!(
- "{}/api/records/v1/news_item_category?filter=news_item_id={}",
+ "{}/api/records/v1/news_item_category?news_item_id={}",
self.base_url, news_item_id
);
let response: ListResponse<serde_json::Value> = self.get_json(&url).await?;
@@ -181,7 +185,7 @@ impl TrailbaseClient {
.collect::<Vec<_>>()
.join(",");
let url = format!(
- "{}/api/records/v1/category?filter={}",
+ "{}/api/records/v1/category?{}",
self.base_url, ids_filter
);
let response: ListResponse<Category> = self.get_json(&url).await?;
@@ -205,7 +209,7 @@ impl TrailbaseClient {
.collect();
let url = format!(
- "{}/api/records/v1/news_item?filter=title~{}&limit={}",
+ "{}/api/records/v1/news_item?title~{}&limit={}",
self.base_url, encoded, limit
);
let response: ListResponse<NewsItem> = self.get_json(&url).await?;