1use serde::{Deserialize, Serialize};
2use uuid::Uuid;
3
4#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
6#[serde(transparent)]
7pub struct GraphId(pub Uuid);
8
9impl GraphId {
10 pub fn new() -> Self {
12 Self(Uuid::new_v4())
13 }
14
15 pub fn from_u128(value: u128) -> Self {
17 Self(Uuid::from_u128(value))
18 }
19
20 pub fn from_bytes(bytes: [u8; 16]) -> Self {
22 Self(Uuid::from_bytes(bytes))
23 }
24}
25
26impl std::fmt::Display for GraphId {
27 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28 self.0.fmt(f)
29 }
30}
31
32#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
34#[serde(transparent)]
35pub struct NodeId(pub Uuid);
36
37impl NodeId {
38 pub fn new() -> Self {
40 Self(Uuid::new_v4())
41 }
42
43 pub fn from_u128(value: u128) -> Self {
45 Self(Uuid::from_u128(value))
46 }
47}
48
49#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
51#[serde(transparent)]
52pub struct PortId(pub Uuid);
53
54impl PortId {
55 pub fn new() -> Self {
57 Self(Uuid::new_v4())
58 }
59
60 pub fn from_u128(value: u128) -> Self {
62 Self(Uuid::from_u128(value))
63 }
64}
65
66#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
68#[serde(transparent)]
69pub struct EdgeId(pub Uuid);
70
71impl EdgeId {
72 pub fn new() -> Self {
74 Self(Uuid::new_v4())
75 }
76
77 pub fn from_u128(value: u128) -> Self {
79 Self(Uuid::from_u128(value))
80 }
81}
82
83#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
85#[serde(transparent)]
86pub struct SymbolId(pub Uuid);
87
88impl SymbolId {
89 pub fn new() -> Self {
91 Self(Uuid::new_v4())
92 }
93
94 pub fn from_u128(value: u128) -> Self {
96 Self(Uuid::from_u128(value))
97 }
98}
99
100#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
102#[serde(transparent)]
103pub struct GroupId(pub Uuid);
104
105impl GroupId {
106 pub fn new() -> Self {
108 Self(Uuid::new_v4())
109 }
110
111 pub fn from_u128(value: u128) -> Self {
113 Self(Uuid::from_u128(value))
114 }
115}
116
117#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
119#[serde(transparent)]
120pub struct StickyNoteId(pub Uuid);
121
122impl StickyNoteId {
123 pub fn new() -> Self {
125 Self(Uuid::new_v4())
126 }
127
128 pub fn from_u128(value: u128) -> Self {
130 Self(Uuid::from_u128(value))
131 }
132}
133
134#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
136#[serde(transparent)]
137pub struct BindingId(pub Uuid);
138
139impl BindingId {
140 pub fn new() -> Self {
142 Self(Uuid::new_v4())
143 }
144
145 pub fn from_u128(value: u128) -> Self {
147 Self(Uuid::from_u128(value))
148 }
149}
150
151#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
155#[serde(transparent)]
156pub struct NodeKindKey(pub String);
157
158impl NodeKindKey {
159 pub fn new(key: impl Into<String>) -> Self {
161 Self(key.into())
162 }
163}
164
165#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
169#[serde(transparent)]
170pub struct PortKey(pub String);
171
172impl PortKey {
173 pub fn new(key: impl Into<String>) -> Self {
175 Self(key.into())
176 }
177}