Skip to main content

melodium_share/
entry.rs

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}