1use serde::{Deserialize, Serialize};
2use serde_repr::{Deserialize_repr, Serialize_repr};
3
4use crate::{LSPObject, Uri};
5
6pub use notification_params::*;
7
8#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
12#[serde(rename_all = "camelCase")]
13pub struct NotebookDocument {
14 pub uri: Uri,
16 pub notebook_type: String,
18 pub version: i32,
21 #[serde(skip_serializing_if = "Option::is_none")]
24 pub metadata: Option<LSPObject>,
25 pub cells: Vec<NotebookCell>,
27}
28
29#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
37#[serde(rename_all = "camelCase")]
38pub struct NotebookCell {
39 pub kind: NotebookCellKind,
41 pub document: Uri,
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub metadata: Option<LSPObject>,
46 #[serde(skip_serializing_if = "Option::is_none")]
49 pub execution_summary: Option<ExecutionSummary>,
50}
51
52#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
53#[serde(rename_all = "camelCase")]
54pub struct ExecutionSummary {
55 pub execution_order: u32,
59 #[serde(skip_serializing_if = "Option::is_none")]
62 pub success: Option<bool>,
63}
64
65#[derive(Debug, Eq, PartialEq, Clone, Serialize_repr, Deserialize_repr)]
66#[repr(u8)]
67pub enum NotebookCellKind {
68 Markup = 1,
70 Code = 2,
72}
73
74#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
78#[serde(rename_all = "camelCase")]
79pub struct NotebookDocumentClientCapabilities {
80 pub synchronization: NotebookDocumentSyncClientCapabilities,
84}
85
86#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
90#[serde(rename_all = "camelCase")]
91pub struct NotebookDocumentSyncClientCapabilities {
92 #[serde(skip_serializing_if = "Option::is_none")]
97 pub dynamic_registration: Option<bool>,
98
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub execution_summary_report: Option<bool>,
102}
103
104#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
118#[serde(rename_all = "camelCase")]
119pub struct NotebookDocumentSyncOptions {
120 pub notebook_selector: Vec<NotebookSelector>,
122 #[serde(skip_serializing_if = "Option::is_none")]
125 pub save: Option<bool>,
126}
127
128#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
132#[serde(rename_all = "camelCase")]
133pub struct NotebookDocumentSyncRegistrationOptions {
134 pub notebook_selector: Vec<NotebookSelector>,
136 #[serde(skip_serializing_if = "Option::is_none")]
139 pub save: Option<bool>,
140 #[serde(skip_serializing_if = "Option::is_none")]
143 pub id: Option<String>,
144}
145
146#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
151#[serde(rename_all = "camelCase")]
152pub struct NotebookCellTextDocumentFilter {
153 pub notebook: Notebook,
158 #[serde(skip_serializing_if = "Option::is_none")]
163 pub language: Option<String>,
164}
165
166#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
167#[serde(rename_all = "camelCase", untagged)]
168pub enum NotebookSelector {
169 ByNotebook {
170 notebook: Notebook,
174 #[serde(skip_serializing_if = "Option::is_none")]
176 cells: Option<Vec<NotebookCellSelector>>,
177 },
178 ByCells {
179 #[serde(skip_serializing_if = "Option::is_none")]
183 notebook: Option<Notebook>,
184 cells: Vec<NotebookCellSelector>,
186 },
187}
188
189#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
190#[serde(rename_all = "camelCase")]
191pub struct NotebookCellSelector {
192 pub language: String,
193}
194
195#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
196#[serde(untagged)]
197pub enum Notebook {
198 String(String),
199 NotebookDocumentFilter(NotebookDocumentFilter),
200}
201
202#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
207#[serde(untagged)]
208pub enum NotebookDocumentFilter {
209 #[serde(rename_all = "camelCase")]
210 ByType {
211 notebook_type: String,
213 #[serde(skip_serializing_if = "Option::is_none")]
215 scheme: Option<String>,
216 #[serde(skip_serializing_if = "Option::is_none")]
218 pattern: Option<String>,
219 },
220 #[serde(rename_all = "camelCase")]
221 ByScheme {
222 #[serde(skip_serializing_if = "Option::is_none")]
224 notebook_type: Option<String>,
225 scheme: String,
227 #[serde(skip_serializing_if = "Option::is_none")]
229 pattern: Option<String>,
230 },
231 #[serde(rename_all = "camelCase")]
232 ByPattern {
233 #[serde(skip_serializing_if = "Option::is_none")]
235 notebook_type: Option<String>,
236 #[serde(skip_serializing_if = "Option::is_none")]
238 scheme: Option<String>,
239 pattern: String,
241 },
242}
243
244mod notification_params {
245 use serde::{Deserialize, Serialize};
246
247 use crate::{
248 TextDocumentContentChangeEvent, TextDocumentIdentifier, TextDocumentItem,
249 VersionedTextDocumentIdentifier,
250 };
251
252 use super::*;
253
254 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
258 #[serde(rename_all = "camelCase")]
259 pub struct DidOpenNotebookDocumentParams {
260 pub notebook_document: NotebookDocument,
262 pub cell_text_documents: Vec<TextDocumentItem>,
265 }
266
267 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
271 #[serde(rename_all = "camelCase")]
272 pub struct DidChangeNotebookDocumentParams {
273 pub notebook_document: VersionedNotebookDocumentIdentifier,
276
277 pub change: NotebookDocumentChangeEvent,
289 }
290
291 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
295 #[serde(rename_all = "camelCase")]
296 pub struct VersionedNotebookDocumentIdentifier {
297 pub version: i32,
299 pub uri: Uri,
301 }
302
303 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
307 #[serde(rename_all = "camelCase")]
308 pub struct NotebookDocumentChangeEvent {
309 #[serde(skip_serializing_if = "Option::is_none")]
311 pub metadata: Option<LSPObject>,
312
313 #[serde(skip_serializing_if = "Option::is_none")]
315 pub cells: Option<NotebookDocumentCellChange>,
316 }
317
318 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
319 #[serde(rename_all = "camelCase")]
320 pub struct NotebookDocumentCellChange {
321 #[serde(skip_serializing_if = "Option::is_none")]
324 pub structure: Option<NotebookDocumentCellChangeStructure>,
325
326 #[serde(skip_serializing_if = "Option::is_none")]
329 pub data: Option<Vec<NotebookCell>>,
330
331 #[serde(skip_serializing_if = "Option::is_none")]
333 pub text_content: Option<Vec<NotebookDocumentChangeTextContent>>,
334 }
335
336 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
337 #[serde(rename_all = "camelCase")]
338 pub struct NotebookDocumentChangeTextContent {
339 pub document: VersionedTextDocumentIdentifier,
340 pub changes: Vec<TextDocumentContentChangeEvent>,
341 }
342
343 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
344 #[serde(rename_all = "camelCase")]
345 pub struct NotebookDocumentCellChangeStructure {
346 pub array: NotebookCellArrayChange,
348 #[serde(skip_serializing_if = "Option::is_none")]
350 pub did_open: Option<Vec<TextDocumentItem>>,
351 #[serde(skip_serializing_if = "Option::is_none")]
353 pub did_close: Option<Vec<TextDocumentIdentifier>>,
354 }
355
356 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
361 #[serde(rename_all = "camelCase")]
362 pub struct NotebookCellArrayChange {
363 pub start: u32,
365
366 pub delete_count: u32,
368
369 #[serde(skip_serializing_if = "Option::is_none")]
371 pub cells: Option<Vec<NotebookCell>>,
372 }
373
374 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
378 #[serde(rename_all = "camelCase")]
379 pub struct DidSaveNotebookDocumentParams {
380 pub notebook_document: NotebookDocumentIdentifier,
382 }
383
384 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
388 #[serde(rename_all = "camelCase")]
389 pub struct NotebookDocumentIdentifier {
390 pub uri: Uri,
392 }
393
394 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
398 #[serde(rename_all = "camelCase")]
399 pub struct DidCloseNotebookDocumentParams {
400 pub notebook_document: NotebookDocumentIdentifier,
402
403 pub cell_text_documents: Vec<TextDocumentIdentifier>,
406 }
407}