use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct NotebookSource {
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<NotebookSourceMetadata>,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub settings: Option<NotebookSourceSettings>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_id: Option<NotebookSourceId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct NotebookSourceMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub source_added_timestamp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub word_count: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub youtube_metadata: Option<NotebookSourceYoutubeMetadata>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct NotebookSourceYoutubeMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub channel_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_id: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct NotebookSourceSettings {
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct NotebookSourceId {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum UserContent {
Web {
#[serde(rename = "webContent")]
web_content: WebContent,
},
Text {
#[serde(rename = "textContent")]
text_content: TextContent,
},
GoogleDrive {
#[serde(rename = "googleDriveContent")]
google_drive_content: GoogleDriveContent,
},
Video {
#[serde(rename = "videoContent")]
video_content: VideoContent,
},
}
impl UserContent {
pub fn web(url: String, source_name: Option<String>) -> Self {
Self::Web {
web_content: WebContent { url, source_name },
}
}
pub fn text(content: String, source_name: Option<String>) -> Self {
Self::Text {
text_content: TextContent {
content,
source_name,
},
}
}
pub fn google_drive(
document_id: String,
mime_type: String,
source_name: Option<String>,
) -> Self {
Self::GoogleDrive {
google_drive_content: GoogleDriveContent {
document_id,
mime_type,
source_name,
},
}
}
pub fn video(url: String) -> Self {
Self::Video {
video_content: VideoContent { url },
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct WebContent {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct TextContent {
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct GoogleDriveContent {
pub document_id: String,
pub mime_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct VideoContent {
#[serde(rename = "youtubeUrl")]
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct BatchCreateSourcesRequest {
#[serde(rename = "userContents")]
pub user_contents: Vec<UserContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct BatchCreateSourcesResponse {
#[serde(default)]
pub sources: Vec<NotebookSource>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_count: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct BatchDeleteSourcesRequest {
pub names: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct BatchDeleteSourcesResponse {
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct UploadSourceFileResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub source_id: Option<NotebookSourceId>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}