nblm_core/models/requests/
source.rs1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::models::source::UserContent;
6
7#[derive(Debug, Clone, Serialize, Deserialize, Default)]
8#[serde(rename_all = "camelCase")]
9pub struct BatchCreateSourcesRequest {
10 #[serde(rename = "userContents")]
11 pub user_contents: Vec<UserContent>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize, Default)]
15pub struct BatchDeleteSourcesRequest {
16 pub names: Vec<String>,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize, Default)]
20pub struct BatchDeleteSourcesResponse {
21 #[serde(flatten)]
23 pub extra: HashMap<String, serde_json::Value>,
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29 use crate::models::source::{TextContent, WebContent};
30
31 #[test]
32 fn batch_create_sources_request_serializes_with_user_contents() {
33 let request = BatchCreateSourcesRequest {
34 user_contents: vec![
35 UserContent::Web {
36 web_content: WebContent {
37 url: "https://example.com".to_string(),
38 source_name: None,
39 },
40 },
41 UserContent::Text {
42 text_content: TextContent {
43 content: "Sample text".to_string(),
44 source_name: Some("My text".to_string()),
45 },
46 },
47 ],
48 };
49 let json = serde_json::to_string(&request).unwrap();
50 assert!(json.contains("userContents"));
51 assert!(json.contains("https://example.com"));
52 assert!(json.contains("Sample text"));
53 }
54
55 #[test]
56 fn batch_delete_sources_request_serializes_correctly() {
57 let request = BatchDeleteSourcesRequest {
58 names: vec!["sources/123".to_string()],
59 };
60 let json = serde_json::to_string(&request).unwrap();
61 assert!(json.contains(r#""names""#));
62 assert!(json.contains("sources/123"));
63 }
64
65 #[test]
66 fn batch_delete_sources_response_deserializes_empty() {
67 let json = r#"{}"#;
68 let response: BatchDeleteSourcesResponse = serde_json::from_str(json).unwrap();
69 assert!(response.extra.is_empty());
70 }
71}