catcolab_document_types/v1/
document.rs1use crate::v0;
2use crate::v0::AnalysisType;
3pub use crate::v0::document::DocumentType;
4
5use super::analysis::Analysis;
6use super::api::Link;
7use super::notebook::Notebook;
8
9use serde::{Deserialize, Serialize};
10
11#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
14pub struct ModelDocumentContent {
15 pub name: String,
16 pub theory: String,
17 #[serde(
18 default,
19 skip_serializing_if = "Option::is_none",
20 rename = "editorVariant"
21 )]
22 pub editor_variant: Option<String>,
23 pub notebook: Notebook<super::model_judgment::ModelJudgment>,
24 pub version: String,
25}
26
27#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
28pub struct DiagramDocumentContent {
29 pub name: String,
30 #[serde(rename = "diagramIn")]
31 pub diagram_in: Link,
32 pub notebook: Notebook<super::diagram_judgment::DiagramJudgment>,
33 pub version: String,
34}
35
36#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
37pub struct AnalysisDocumentContent {
38 pub name: String,
39 #[serde(rename = "analysisType")]
40 pub analysis_type: AnalysisType,
41 #[serde(rename = "analysisOf")]
42 pub analysis_of: Link,
43 pub notebook: Notebook<Analysis>,
44 pub version: String,
45}
46
47#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
48#[serde(tag = "type")]
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 editor_variant: None,
65 notebook: Notebook::migrate_from_v0(old.notebook),
66 version: "1".to_string(),
67 }),
68
69 v0::Document::Diagram(old) => Document::Diagram(DiagramDocumentContent {
70 name: old.name,
71 diagram_in: old.diagram_in,
72 notebook: Notebook::migrate_from_v0(old.notebook),
73 version: "1".to_string(),
74 }),
75
76 v0::Document::Analysis(old) => Document::Analysis(AnalysisDocumentContent {
77 name: old.name,
78 analysis_type: old.analysis_type,
79 analysis_of: old.analysis_of,
80 notebook: Notebook::migrate_from_v0(old.notebook),
81 version: "1".to_string(),
82 }),
83 }
84 }
85}