catcolab_document_types/v0/
document.rs1use super::analysis::Analysis;
2use super::api::Link;
3use super::diagram_judgment::DiagramJudgment;
4use super::model_judgment::ModelJudgment;
5use super::notebook::Notebook;
6
7use std::str::FromStr;
8
9use serde::{Deserialize, Serialize};
10use tsify::Tsify;
11
12#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
15pub struct ModelDocumentContent {
16 pub name: String,
17 pub theory: String,
18 pub notebook: Notebook<ModelJudgment>,
19}
20
21#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
22pub struct DiagramDocumentContent {
23 pub name: String,
24 #[serde(rename = "diagramIn")]
25 pub diagram_in: Link,
26 pub notebook: Notebook<DiagramJudgment>,
27}
28
29#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Tsify)]
30#[tsify(into_wasm_abi, from_wasm_abi)]
31pub enum AnalysisType {
32 #[serde(rename = "model")]
33 Model,
34 #[serde(rename = "diagram")]
35 Diagram,
36}
37
38#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
39pub struct AnalysisDocumentContent {
40 pub name: String,
41 #[serde(rename = "analysisType")]
42 pub analysis_type: AnalysisType,
43 #[serde(rename = "analysisOf")]
44 pub analysis_of: Link,
45 pub notebook: Notebook<Analysis>,
46}
47
48#[derive(PartialEq, Eq, Debug, Clone, Copy, Serialize, Deserialize, Tsify)]
50#[cfg_attr(
51 feature = "backend",
52 derive(autosurgeon::Reconcile, autosurgeon::Hydrate, ts_rs::TS)
53)]
54#[cfg_attr(
55 feature = "backend",
56 ts(export_to = "user_state.ts", rename_all = "lowercase")
57)]
58#[serde(rename_all = "lowercase")]
59#[tsify(into_wasm_abi, from_wasm_abi)]
60pub enum DocumentType {
61 #[cfg_attr(feature = "backend", autosurgeon(rename = "model"))]
62 Model,
63 #[cfg_attr(feature = "backend", autosurgeon(rename = "diagram"))]
64 Diagram,
65 #[cfg_attr(feature = "backend", autosurgeon(rename = "analysis"))]
66 Analysis,
67}
68
69impl FromStr for DocumentType {
70 type Err = String;
71
72 fn from_str(s: &str) -> Result<Self, Self::Err> {
73 match s {
74 "model" => Ok(DocumentType::Model),
75 "diagram" => Ok(DocumentType::Diagram),
76 "analysis" => Ok(DocumentType::Analysis),
77 other => Err(format!("unknown document type: {other}")),
78 }
79 }
80}
81
82#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
83#[serde(tag = "type")]
84pub enum Document {
85 #[serde(rename = "model")]
86 Model(ModelDocumentContent),
87 #[serde(rename = "diagram")]
88 Diagram(DiagramDocumentContent),
89 #[serde(rename = "analysis")]
90 Analysis(AnalysisDocumentContent),
91}