nblm_core/models/requests/
notebook.rs1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize)]
6#[serde(rename_all = "camelCase")]
7pub struct CreateNotebookRequest {
8 pub title: String,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, Default)]
21pub struct BatchDeleteNotebooksRequest {
22 pub names: Vec<String>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize, Default)]
26pub struct BatchDeleteNotebooksResponse {
27 #[serde(flatten)]
29 pub extra: HashMap<String, serde_json::Value>,
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[test]
37 fn create_notebook_request_serializes_correctly() {
38 let request = CreateNotebookRequest {
39 title: "Test Notebook".to_string(),
40 };
41 let json = serde_json::to_string(&request).unwrap();
42 assert!(json.contains(r#""title":"Test Notebook""#));
43 }
44
45 #[test]
46 fn batch_delete_notebooks_request_serializes_correctly() {
47 let request = BatchDeleteNotebooksRequest {
48 names: vec!["notebooks/123".to_string(), "notebooks/456".to_string()],
49 };
50 let json = serde_json::to_string(&request).unwrap();
51 assert!(json.contains(r#""names""#));
52 assert!(json.contains("notebooks/123"));
53 assert!(json.contains("notebooks/456"));
54 }
55
56 #[test]
57 fn batch_delete_notebooks_response_deserializes_empty() {
58 let json = r#"{}"#;
59 let response: BatchDeleteNotebooksResponse = serde_json::from_str(json).unwrap();
60 assert!(response.extra.is_empty());
61 }
62
63 #[test]
64 fn batch_delete_notebooks_response_deserializes_with_extra() {
65 let json = r#"{"customField":"value"}"#;
66 let response: BatchDeleteNotebooksResponse = serde_json::from_str(json).unwrap();
67 assert_eq!(response.extra.len(), 1);
68 assert_eq!(
69 response.extra.get("customField").unwrap().as_str().unwrap(),
70 "value"
71 );
72 }
73}