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(rename_all = "camelCase", untagged)]
208pub enum NotebookDocumentFilter {
209 ByType {
210 notebook_type: String,
212 #[serde(skip_serializing_if = "Option::is_none")]
214 scheme: Option<String>,
215 #[serde(skip_serializing_if = "Option::is_none")]
217 pattern: Option<String>,
218 },
219 ByScheme {
220 #[serde(skip_serializing_if = "Option::is_none")]
222 notebook_type: Option<String>,
223 scheme: String,
225 #[serde(skip_serializing_if = "Option::is_none")]
227 pattern: Option<String>,
228 },
229 ByPattern {
230 #[serde(skip_serializing_if = "Option::is_none")]
232 notebook_type: Option<String>,
233 #[serde(skip_serializing_if = "Option::is_none")]
235 scheme: Option<String>,
236 pattern: String,
238 },
239}
240
241mod notification_params {
242 use serde::{Deserialize, Serialize};
243
244 use crate::{
245 TextDocumentContentChangeEvent, TextDocumentIdentifier, TextDocumentItem,
246 VersionedTextDocumentIdentifier,
247 };
248
249 use super::*;
250
251 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
255 #[serde(rename_all = "camelCase")]
256 pub struct DidOpenNotebookDocumentParams {
257 pub notebook_document: NotebookDocument,
259 pub cell_text_documents: Vec<TextDocumentItem>,
262 }
263
264 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
268 #[serde(rename_all = "camelCase")]
269 pub struct DidChangeNotebookDocumentParams {
270 pub notebook_document: VersionedNotebookDocumentIdentifier,
273
274 pub change: NotebookDocumentChangeEvent,
286 }
287
288 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
292 #[serde(rename_all = "camelCase")]
293 pub struct VersionedNotebookDocumentIdentifier {
294 pub version: i32,
296 pub uri: Uri,
298 }
299
300 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
304 #[serde(rename_all = "camelCase")]
305 pub struct NotebookDocumentChangeEvent {
306 #[serde(skip_serializing_if = "Option::is_none")]
308 pub metadata: Option<LSPObject>,
309
310 #[serde(skip_serializing_if = "Option::is_none")]
312 pub cells: Option<NotebookDocumentCellChange>,
313 }
314
315 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
316 #[serde(rename_all = "camelCase")]
317 pub struct NotebookDocumentCellChange {
318 #[serde(skip_serializing_if = "Option::is_none")]
321 pub structure: Option<NotebookDocumentCellChangeStructure>,
322
323 #[serde(skip_serializing_if = "Option::is_none")]
326 pub data: Option<Vec<NotebookCell>>,
327
328 #[serde(skip_serializing_if = "Option::is_none")]
330 pub text_content: Option<Vec<NotebookDocumentChangeTextContent>>,
331 }
332
333 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
334 #[serde(rename_all = "camelCase")]
335 pub struct NotebookDocumentChangeTextContent {
336 pub document: VersionedTextDocumentIdentifier,
337 pub changes: Vec<TextDocumentContentChangeEvent>,
338 }
339
340 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
341 #[serde(rename_all = "camelCase")]
342 pub struct NotebookDocumentCellChangeStructure {
343 pub array: NotebookCellArrayChange,
345 #[serde(skip_serializing_if = "Option::is_none")]
347 pub did_open: Option<Vec<TextDocumentItem>>,
348 #[serde(skip_serializing_if = "Option::is_none")]
350 pub did_close: Option<Vec<TextDocumentIdentifier>>,
351 }
352
353 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
358 #[serde(rename_all = "camelCase")]
359 pub struct NotebookCellArrayChange {
360 pub start: u32,
362
363 pub delete_count: u32,
365
366 #[serde(skip_serializing_if = "Option::is_none")]
368 pub cells: Option<Vec<NotebookCell>>,
369 }
370
371 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
375 #[serde(rename_all = "camelCase")]
376 pub struct DidSaveNotebookDocumentParams {
377 pub notebook_document: NotebookDocumentIdentifier,
379 }
380
381 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
385 #[serde(rename_all = "camelCase")]
386 pub struct NotebookDocumentIdentifier {
387 pub uri: Uri,
389 }
390
391 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
395 #[serde(rename_all = "camelCase")]
396 pub struct DidCloseNotebookDocumentParams {
397 pub notebook_document: NotebookDocumentIdentifier,
399
400 pub cell_text_documents: Vec<TextDocumentIdentifier>,
403 }
404}