notebook_types/v1/
document.rs

1use 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/// This is the content of a model document. For legacy reasons, we reserve
14/// the name "ModelDocument" for `Document & { type: "model" }`.
15#[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}