feat: add lists endpoint with save and delete list item methods

Implement SaveListItemRequest and SaveListItemResponse models. Add
save_list_item (create/update via PUT) and delete_list_item methods.
Tests cover creating, updating, deleting list items and not-found error.
This commit is contained in:
Stevan Freeborn
2026-03-25 13:45:29 -05:00
parent 1161c645bf
commit 9d63911fc1
5 changed files with 136 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
use reqwest::Method;
use uuid::Uuid;
use crate::client::OnspringClient;
use crate::error::Result;
use crate::models::{SaveListItemRequest, SaveListItemResponse};
impl OnspringClient {
/// Creates or updates a list item in the specified list.
pub async fn save_list_item(
&self,
list_id: i32,
request: SaveListItemRequest,
) -> Result<SaveListItemResponse> {
let path = format!("/Lists/id/{}/items", list_id);
self.request(Method::PUT, &path, &[], Some(&request)).await
}
/// Deletes a list item from the specified list.
pub async fn delete_list_item(&self, list_id: i32, item_id: Uuid) -> Result<()> {
let path = format!("/Lists/id/{}/itemId/{}", list_id, item_id);
self.request_no_content(Method::DELETE, &path, &[], Option::<&()>::None)
.await
}
}
+1
View File
@@ -1,5 +1,6 @@
mod apps;
mod fields;
mod files;
mod lists;
mod ping;
mod records;
+22
View File
@@ -0,0 +1,22 @@
use serde::{Deserialize, Serialize};
use uuid::Uuid;
/// Request to create or update a list item.
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SaveListItemRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<Uuid>,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub numeric_value: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub color: Option<String>,
}
/// Response from saving a list item.
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SaveListItemResponse {
pub id: Uuid,
}
+2
View File
@@ -2,6 +2,7 @@ mod app;
mod enums;
mod field;
pub mod file;
pub mod list;
mod paging;
pub mod record;
@@ -9,5 +10,6 @@ pub use app::*;
pub use enums::*;
pub use field::*;
pub use file::*;
pub use list::*;
pub use paging::*;
pub use record::*;