nblm_core/models/enterprise/
source.rs1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Clone, Serialize, Deserialize, Default)]
7#[serde(rename_all = "camelCase")]
8pub struct NotebookSource {
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub metadata: Option<NotebookSourceMetadata>,
11 pub name: String,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub settings: Option<NotebookSourceSettings>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub source_id: Option<NotebookSourceId>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub title: Option<String>,
18 #[serde(flatten)]
19 pub extra: HashMap<String, Value>,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, Default)]
23#[serde(rename_all = "camelCase")]
24pub struct NotebookSourceMetadata {
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub source_added_timestamp: Option<String>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub word_count: Option<u64>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub youtube_metadata: Option<NotebookSourceYoutubeMetadata>,
31 #[serde(flatten)]
32 pub extra: HashMap<String, Value>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, Default)]
36#[serde(rename_all = "camelCase")]
37pub struct NotebookSourceYoutubeMetadata {
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub channel_name: Option<String>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub video_id: Option<String>,
42 #[serde(flatten)]
43 pub extra: HashMap<String, Value>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, Default)]
47#[serde(rename_all = "camelCase")]
48pub struct NotebookSourceSettings {
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub status: Option<String>,
51 #[serde(flatten)]
52 pub extra: HashMap<String, Value>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize, Default)]
56#[serde(rename_all = "camelCase")]
57pub struct NotebookSourceId {
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub id: Option<String>,
60 #[serde(flatten)]
61 pub extra: HashMap<String, Value>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
65#[serde(untagged)]
66pub enum UserContent {
67 Web {
68 #[serde(rename = "webContent")]
69 web_content: WebContent,
70 },
71 Text {
72 #[serde(rename = "textContent")]
73 text_content: TextContent,
74 },
75 GoogleDrive {
76 #[serde(rename = "googleDriveContent")]
77 google_drive_content: GoogleDriveContent,
78 },
79 Video {
80 #[serde(rename = "videoContent")]
81 video_content: VideoContent,
82 },
83}
84
85impl UserContent {
86 pub fn web(url: String, source_name: Option<String>) -> Self {
87 Self::Web {
88 web_content: WebContent { url, source_name },
89 }
90 }
91
92 pub fn text(content: String, source_name: Option<String>) -> Self {
93 Self::Text {
94 text_content: TextContent {
95 content,
96 source_name,
97 },
98 }
99 }
100
101 pub fn google_drive(
102 document_id: String,
103 mime_type: String,
104 source_name: Option<String>,
105 ) -> Self {
106 Self::GoogleDrive {
107 google_drive_content: GoogleDriveContent {
108 document_id,
109 mime_type,
110 source_name,
111 },
112 }
113 }
114
115 pub fn video(url: String) -> Self {
116 Self::Video {
117 video_content: VideoContent { url },
118 }
119 }
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize, Default)]
123#[serde(rename_all = "camelCase")]
124pub struct WebContent {
125 pub url: String,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub source_name: Option<String>,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize, Default)]
131#[serde(rename_all = "camelCase")]
132pub struct TextContent {
133 pub content: String,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 pub source_name: Option<String>,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize, Default)]
139#[serde(rename_all = "camelCase")]
140pub struct GoogleDriveContent {
141 pub document_id: String,
142 pub mime_type: String,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub source_name: Option<String>,
145}
146
147#[derive(Debug, Clone, Serialize, Deserialize, Default)]
148pub struct VideoContent {
149 #[serde(rename = "youtubeUrl")]
150 pub url: String,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize, Default)]
154#[serde(rename_all = "camelCase")]
155pub struct BatchCreateSourcesRequest {
156 #[serde(rename = "userContents")]
157 pub user_contents: Vec<UserContent>,
158}
159
160#[derive(Debug, Clone, Serialize, Deserialize, Default)]
161#[serde(rename_all = "camelCase")]
162pub struct BatchCreateSourcesResponse {
163 #[serde(default)]
164 pub sources: Vec<NotebookSource>,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub error_count: Option<i32>,
167}
168
169#[derive(Debug, Clone, Serialize, Deserialize, Default)]
170#[serde(rename_all = "camelCase")]
171pub struct BatchDeleteSourcesRequest {
172 pub names: Vec<String>,
173}
174
175#[derive(Debug, Clone, Serialize, Deserialize, Default)]
176#[serde(rename_all = "camelCase")]
177pub struct BatchDeleteSourcesResponse {
178 #[serde(flatten)]
179 pub extra: HashMap<String, Value>,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize, Default)]
183#[serde(rename_all = "camelCase")]
184pub struct UploadSourceFileResponse {
185 #[serde(skip_serializing_if = "Option::is_none")]
186 pub source_id: Option<NotebookSourceId>,
187 #[serde(flatten)]
188 pub extra: HashMap<String, Value>,
189}