nblm_core/models/requests/audio.rs
1use serde::{Deserialize, Serialize};
2
3/// Audio Overview creation request.
4///
5/// # Known Issues (as of 2025-10-19)
6///
7/// Despite the API documentation mentioning fields like `sourceIds`, `episodeFocus`,
8/// and `languageCode`, the actual API only accepts an empty request body `{}`.
9/// Any fields sent result in "Unknown name" errors.
10/// These configuration options are likely set through the NotebookLM UI after creation.
11///
12/// The fields below are commented out but kept for future compatibility if the API
13/// implements them.
14#[derive(Debug, Clone, Serialize, Deserialize, Default)]
15pub struct AudioOverviewRequest {
16 // TODO: Uncomment when API supports these fields
17 // #[serde(skip_serializing_if = "Option::is_none", rename = "sourceIds")]
18 // pub source_ids: Option<Vec<SourceId>>,
19 // #[serde(skip_serializing_if = "Option::is_none", rename = "episodeFocus")]
20 // pub episode_focus: Option<String>,
21 // #[serde(skip_serializing_if = "Option::is_none", rename = "languageCode")]
22 // pub language_code: Option<String>,
23}
24
25// TODO: Uncomment when API supports sourceIds field
26// #[derive(Debug, Clone, Serialize, Deserialize)]
27// pub struct SourceId {
28// pub id: String,
29// }
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn audio_overview_request_serializes_to_empty_object() {
37 let request = AudioOverviewRequest::default();
38 let json = serde_json::to_string(&request).unwrap();
39 assert_eq!(json, "{}");
40 }
41
42 #[test]
43 fn audio_overview_request_deserializes_from_empty_object() {
44 let json = r#"{}"#;
45 let request: AudioOverviewRequest = serde_json::from_str(json).unwrap();
46 let _ = request; // Verify it deserializes successfully
47 }
48}