Skip to main content

alizarin_core/graph/
cards.rs

1//! Card-related types for UI configuration.
2
3use super::translatable::StaticTranslatableString;
4use serde::{Deserialize, Serialize};
5
6/// A constraint on a card limiting how nodes can be used
7#[derive(Serialize, Deserialize, Clone, Debug)]
8pub struct StaticConstraint {
9    pub card_id: String,
10    pub constraintid: String,
11    pub nodes: Vec<String>,
12    pub uniquetoallinstances: bool,
13}
14
15/// Publication information for a graph
16#[derive(Serialize, Deserialize, Clone, Debug)]
17pub struct StaticPublication {
18    pub graph_id: String,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub notes: Option<String>,
21    pub publicationid: String,
22    pub published_time: String,
23}
24
25/// Mapping between cards, nodes, and widgets
26#[derive(Serialize, Deserialize, Clone, Debug)]
27pub struct StaticCardsXNodesXWidgets {
28    pub card_id: String,
29    #[serde(default)]
30    pub config: serde_json::Value,
31    pub id: String,
32    pub label: StaticTranslatableString,
33    pub node_id: String,
34    #[serde(default)]
35    pub sortorder: Option<i32>,
36    pub visible: bool,
37    pub widget_id: String,
38    // Arches-HER 2.0+ fields
39    /// Source identifier for import/export tracking
40    #[serde(default, skip_serializing_if = "Option::is_none")]
41    pub source_identifier_id: Option<String>,
42}
43
44/// Mapping between functions and graphs
45#[derive(Serialize, Deserialize, Clone, Debug)]
46pub struct StaticFunctionsXGraphs {
47    #[serde(default)]
48    pub config: serde_json::Value,
49    pub function_id: String,
50    pub graph_id: String,
51    pub id: String,
52}
53
54/// A card defining UI and validation for a nodegroup
55#[derive(Serialize, Deserialize, Clone, Debug)]
56pub struct StaticCard {
57    pub active: bool,
58    pub cardid: String,
59    pub component_id: String,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub config: Option<serde_json::Value>,
62    #[serde(default)]
63    pub constraints: Vec<StaticConstraint>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub cssclass: Option<String>,
66    #[serde(default)]
67    pub description: Option<StaticTranslatableString>,
68    pub graph_id: String,
69    pub helpenabled: bool,
70    pub helptext: StaticTranslatableString,
71    pub helptitle: StaticTranslatableString,
72    pub instructions: StaticTranslatableString,
73    #[serde(default)]
74    pub is_editable: Option<bool>,
75    pub name: StaticTranslatableString,
76    pub nodegroup_id: String,
77    #[serde(default)]
78    pub sortorder: Option<i32>,
79    pub visible: bool,
80    // Arches-HER 2.0+ fields
81    /// Source identifier for import/export tracking
82    #[serde(default, skip_serializing_if = "Option::is_none")]
83    pub source_identifier_id: Option<String>,
84}