notebook_types/v1/
document.rs1use crate::v0;
2use crate::v0::AnalysisType;
3
4use super::analysis::Analysis;
5use super::api::Link;
6use super::diagram_judgment::DiagramJudgment;
7use super::model_judgment::ModelJudgment;
8use super::notebook::Notebook;
9
10use serde::{Deserialize, Serialize};
11use tsify::Tsify;
12
13#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Tsify)]
16#[tsify(into_wasm_abi, from_wasm_abi)]
17pub struct ModelDocumentContent {
18 pub name: String,
19 pub theory: String,
20 pub notebook: Notebook<ModelJudgment>,
21 pub version: String,
22}
23
24#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Tsify)]
25#[tsify(into_wasm_abi, from_wasm_abi)]
26pub struct DiagramDocumentContent {
27 pub name: String,
28 #[serde(rename = "diagramIn")]
29 pub diagram_in: Link,
30 pub notebook: Notebook<DiagramJudgment>,
31 pub version: String,
32}
33
34#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Tsify)]
35#[tsify(into_wasm_abi, from_wasm_abi)]
36pub struct AnalysisDocumentContent {
37 pub name: String,
38 #[serde(rename = "analysisType")]
39 pub analysis_type: AnalysisType,
40 #[serde(rename = "analysisOf")]
41 pub analysis_of: Link,
42 pub notebook: Notebook<Analysis>,
43 pub version: String,
44}
45
46#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Tsify)]
47#[serde(tag = "type")]
48#[tsify(into_wasm_abi, from_wasm_abi)]
49pub enum Document {
50 #[serde(rename = "model")]
51 Model(ModelDocumentContent),
52 #[serde(rename = "diagram")]
53 Diagram(DiagramDocumentContent),
54 #[serde(rename = "analysis")]
55 Analysis(AnalysisDocumentContent),
56}
57
58impl Document {
59 pub fn migrate_from_v0(old: v0::Document) -> Self {
60 match old {
61 v0::Document::Model(old) => Document::Model(ModelDocumentContent {
62 name: old.name,
63 theory: old.theory,
64 notebook: Notebook::migrate_from_v0(old.notebook),
65 version: "1".to_string(),
66 }),
67
68 v0::Document::Diagram(old) => Document::Diagram(DiagramDocumentContent {
69 name: old.name,
70 diagram_in: old.diagram_in,
71 notebook: Notebook::migrate_from_v0(old.notebook),
72 version: "1".to_string(),
73 }),
74
75 v0::Document::Analysis(old) => Document::Analysis(AnalysisDocumentContent {
76 name: old.name,
77 analysis_type: old.analysis_type,
78 analysis_of: old.analysis_of,
79 notebook: Notebook::migrate_from_v0(old.notebook),
80 version: "1".to_string(),
81 }),
82 }
83 }
84}