1use serde::{Deserialize, Serialize};
2
3use crate::{LSPObject, Uri, macros::lsp_enum};
4
5pub use notification_params::*;
6
7#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
11#[serde(rename_all = "camelCase")]
12pub struct NotebookDocument {
13 pub uri: Uri,
15 pub notebook_type: String,
17 pub version: i32,
20 #[serde(skip_serializing_if = "Option::is_none")]
23 pub metadata: Option<LSPObject>,
24 pub cells: Vec<NotebookCell>,
26}
27
28#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
36#[serde(rename_all = "camelCase")]
37pub struct NotebookCell {
38 pub kind: NotebookCellKind,
40 pub document: Uri,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub metadata: Option<LSPObject>,
45 #[serde(skip_serializing_if = "Option::is_none")]
48 pub execution_summary: Option<ExecutionSummary>,
49}
50
51#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
52#[serde(rename_all = "camelCase")]
53pub struct ExecutionSummary {
54 pub execution_order: u32,
58 #[serde(skip_serializing_if = "Option::is_none")]
61 pub success: Option<bool>,
62}
63
64#[derive(Clone, PartialEq, Eq, Deserialize, Serialize)]
65pub struct NotebookCellKind(i32);
66
67lsp_enum! {
68 impl NotebookCellKind {
69 const MARKUP = 1;
71 const CODE = 2;
73 }
74}
75
76#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
80#[serde(rename_all = "camelCase")]
81pub struct NotebookDocumentClientCapabilities {
82 pub synchronization: NotebookDocumentSyncClientCapabilities,
86}
87
88#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
92#[serde(rename_all = "camelCase")]
93pub struct NotebookDocumentSyncClientCapabilities {
94 #[serde(skip_serializing_if = "Option::is_none")]
99 pub dynamic_registration: Option<bool>,
100
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub execution_summary_report: Option<bool>,
104}
105
106#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
120#[serde(rename_all = "camelCase")]
121pub struct NotebookDocumentSyncOptions {
122 pub notebook_selector: Vec<NotebookSelector>,
124 #[serde(skip_serializing_if = "Option::is_none")]
127 pub save: Option<bool>,
128}
129
130#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
134#[serde(rename_all = "camelCase")]
135pub struct NotebookDocumentSyncRegistrationOptions {
136 pub notebook_selector: Vec<NotebookSelector>,
138 #[serde(skip_serializing_if = "Option::is_none")]
141 pub save: Option<bool>,
142 #[serde(skip_serializing_if = "Option::is_none")]
145 pub id: Option<String>,
146}
147
148#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
153#[serde(rename_all = "camelCase")]
154pub struct NotebookCellTextDocumentFilter {
155 pub notebook: Notebook,
160 #[serde(skip_serializing_if = "Option::is_none")]
165 pub language: Option<String>,
166}
167
168#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
169#[serde(rename_all = "camelCase", untagged)]
170pub enum NotebookSelector {
171 ByNotebook {
172 notebook: Notebook,
176 #[serde(skip_serializing_if = "Option::is_none")]
178 cells: Option<Vec<NotebookCellSelector>>,
179 },
180 ByCells {
181 #[serde(skip_serializing_if = "Option::is_none")]
185 notebook: Option<Notebook>,
186 cells: Vec<NotebookCellSelector>,
188 },
189}
190
191#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
192#[serde(rename_all = "camelCase")]
193pub struct NotebookCellSelector {
194 pub language: String,
195}
196
197#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
198#[serde(untagged)]
199pub enum Notebook {
200 String(String),
201 NotebookDocumentFilter(NotebookDocumentFilter),
202}
203
204#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
209#[serde(rename_all = "camelCase", untagged)]
210pub enum NotebookDocumentFilter {
211 ByType {
212 notebook_type: String,
214 #[serde(skip_serializing_if = "Option::is_none")]
216 scheme: Option<String>,
217 #[serde(skip_serializing_if = "Option::is_none")]
219 pattern: Option<String>,
220 },
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 ByPattern {
232 #[serde(skip_serializing_if = "Option::is_none")]
234 notebook_type: Option<String>,
235 #[serde(skip_serializing_if = "Option::is_none")]
237 scheme: Option<String>,
238 pattern: String,
240 },
241}
242
243mod notification_params {
244 use serde::{Deserialize, Serialize};
245
246 use crate::{
247 TextDocumentContentChangeEvent, TextDocumentIdentifier, TextDocumentItem,
248 VersionedTextDocumentIdentifier,
249 };
250
251 use super::{LSPObject, NotebookCell, NotebookDocument, Uri};
252
253 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
257 #[serde(rename_all = "camelCase")]
258 pub struct DidOpenNotebookDocumentParams {
259 pub notebook_document: NotebookDocument,
261 pub cell_text_documents: Vec<TextDocumentItem>,
264 }
265
266 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
270 #[serde(rename_all = "camelCase")]
271 pub struct DidChangeNotebookDocumentParams {
272 pub notebook_document: VersionedNotebookDocumentIdentifier,
275
276 pub change: NotebookDocumentChangeEvent,
288 }
289
290 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
294 #[serde(rename_all = "camelCase")]
295 pub struct VersionedNotebookDocumentIdentifier {
296 pub version: i32,
298 pub uri: Uri,
300 }
301
302 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
306 #[serde(rename_all = "camelCase")]
307 pub struct NotebookDocumentChangeEvent {
308 #[serde(skip_serializing_if = "Option::is_none")]
310 pub metadata: Option<LSPObject>,
311
312 #[serde(skip_serializing_if = "Option::is_none")]
314 pub cells: Option<NotebookDocumentCellChange>,
315 }
316
317 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
318 #[serde(rename_all = "camelCase")]
319 pub struct NotebookDocumentCellChange {
320 #[serde(skip_serializing_if = "Option::is_none")]
323 pub structure: Option<NotebookDocumentCellChangeStructure>,
324
325 #[serde(skip_serializing_if = "Option::is_none")]
328 pub data: Option<Vec<NotebookCell>>,
329
330 #[serde(skip_serializing_if = "Option::is_none")]
332 pub text_content: Option<Vec<NotebookDocumentChangeTextContent>>,
333 }
334
335 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
336 #[serde(rename_all = "camelCase")]
337 pub struct NotebookDocumentChangeTextContent {
338 pub document: VersionedTextDocumentIdentifier,
339 pub changes: Vec<TextDocumentContentChangeEvent>,
340 }
341
342 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
343 #[serde(rename_all = "camelCase")]
344 pub struct NotebookDocumentCellChangeStructure {
345 pub array: NotebookCellArrayChange,
347 #[serde(skip_serializing_if = "Option::is_none")]
349 pub did_open: Option<Vec<TextDocumentItem>>,
350 #[serde(skip_serializing_if = "Option::is_none")]
352 pub did_close: Option<Vec<TextDocumentIdentifier>>,
353 }
354
355 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
360 #[serde(rename_all = "camelCase")]
361 pub struct NotebookCellArrayChange {
362 pub start: u32,
364
365 pub delete_count: u32,
367
368 #[serde(skip_serializing_if = "Option::is_none")]
370 pub cells: Option<Vec<NotebookCell>>,
371 }
372
373 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
377 #[serde(rename_all = "camelCase")]
378 pub struct DidSaveNotebookDocumentParams {
379 pub notebook_document: NotebookDocumentIdentifier,
381 }
382
383 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
387 #[serde(rename_all = "camelCase")]
388 pub struct NotebookDocumentIdentifier {
389 pub uri: Uri,
391 }
392
393 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
397 #[serde(rename_all = "camelCase")]
398 pub struct DidCloseNotebookDocumentParams {
399 pub notebook_document: NotebookDocumentIdentifier,
401
402 pub cell_text_documents: Vec<TextDocumentIdentifier>,
405 }
406}