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}