1use super::{Context, Data, Function, Identifier, Model, Treatment};
2use melodium_common::descriptor::Entry as CommonEntry;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6#[serde(rename_all = "snake_case")]
7#[cfg_attr(feature = "webassembly", derive(tsify::Tsify))]
8#[cfg_attr(feature = "webassembly", tsify(into_wasm_abi, from_wasm_abi))]
9pub enum Entry {
10 Context(Context),
11 Data(Data),
12 Function(Function),
13 Model(Model),
14 Treatment(Treatment),
15}
16
17impl Entry {
18 pub fn identifier(&self) -> &Identifier {
19 match self {
20 Entry::Context(element) => &element.identifier,
21 Entry::Data(element) => &element.identifier,
22 Entry::Function(element) => &element.identifier,
23 Entry::Model(element) => &element.identifier,
24 Entry::Treatment(element) => &element.identifier,
25 }
26 }
27}
28
29impl From<&CommonEntry> for Entry {
30 fn from(value: &CommonEntry) -> Self {
31 match value {
32 CommonEntry::Context(element) => Self::Context((&**element).into()),
33 CommonEntry::Data(element) => Self::Data((&**element).into()),
34 CommonEntry::Function(element) => Self::Function((&**element).into()),
35 CommonEntry::Model(element) => Self::Model(element.into()),
36 CommonEntry::Treatment(element) => Self::Treatment(element.into()),
37 }
38 }
39}
40
41#[derive(Clone, Debug, PartialEq, Eq, Ord, Serialize, Deserialize)]
42#[serde(rename_all = "snake_case")]
43#[cfg_attr(feature = "webassembly", derive(tsify::Tsify))]
44#[cfg_attr(feature = "webassembly", tsify(into_wasm_abi, from_wasm_abi))]
45pub enum EntryId {
46 Context(Identifier),
47 Data(Identifier),
48 Function(Identifier),
49 Model(Identifier),
50 Treatment(Identifier),
51}
52
53impl EntryId {
54 pub fn identifier(&self) -> &Identifier {
55 match self {
56 EntryId::Context(id) => id,
57 EntryId::Data(id) => id,
58 EntryId::Function(id) => id,
59 EntryId::Model(id) => id,
60 EntryId::Treatment(id) => id,
61 }
62 }
63}
64
65impl PartialOrd for EntryId {
66 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
67 self.identifier().partial_cmp(other.identifier())
68 }
69}
70
71impl From<&CommonEntry> for EntryId {
72 fn from(value: &CommonEntry) -> Self {
73 match value {
74 CommonEntry::Context(element) => Self::Context(element.identifier().into()),
75 CommonEntry::Data(element) => Self::Data(element.identifier().into()),
76 CommonEntry::Function(element) => Self::Function(element.identifier().into()),
77 CommonEntry::Model(element) => Self::Model(element.identifier().into()),
78 CommonEntry::Treatment(element) => Self::Treatment(element.identifier().into()),
79 }
80 }
81}
82
83#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
84#[serde(rename_all = "snake_case")]
85#[cfg_attr(feature = "webassembly", derive(tsify::Tsify))]
86#[cfg_attr(feature = "webassembly", tsify(into_wasm_abi, from_wasm_abi))]
87pub enum EntryKind {
88 Context,
89 Data,
90 Function,
91 Model,
92 Treatment,
93}
94
95impl From<&CommonEntry> for EntryKind {
96 fn from(value: &CommonEntry) -> Self {
97 match value {
98 CommonEntry::Context(_) => Self::Context,
99 CommonEntry::Data(_) => Self::Data,
100 CommonEntry::Function(_) => Self::Function,
101 CommonEntry::Model(_) => Self::Model,
102 CommonEntry::Treatment(_) => Self::Treatment,
103 }
104 }
105}
106
107impl From<&Entry> for EntryKind {
108 fn from(value: &Entry) -> Self {
109 match value {
110 Entry::Context(_) => Self::Context,
111 Entry::Data(_) => Self::Data,
112 Entry::Function(_) => Self::Function,
113 Entry::Model(_) => Self::Model,
114 Entry::Treatment(_) => Self::Treatment,
115 }
116 }
117}
118
119impl From<&EntryId> for EntryKind {
120 fn from(value: &EntryId) -> Self {
121 match value {
122 EntryId::Context(_) => Self::Context,
123 EntryId::Data(_) => Self::Data,
124 EntryId::Function(_) => Self::Function,
125 EntryId::Model(_) => Self::Model,
126 EntryId::Treatment(_) => Self::Treatment,
127 }
128 }
129}