xee_interpreter/stack/
value.rs1use crate::error;
4
5use crate::sequence;
6
7#[derive(Debug, Clone, PartialEq)]
8pub enum Value {
9 Absent,
10 Sequence(sequence::Sequence),
11}
12
13#[cfg(target_arch = "x86_64")]
15static_assertions::assert_eq_size!(Value, [u8; 24]);
16
17impl Value {
18 pub(crate) fn is_absent(&self) -> bool {
19 matches!(self, Value::Absent)
20 }
21}
22
23impl TryFrom<Value> for sequence::Sequence {
24 type Error = error::Error;
25
26 fn try_from(value: Value) -> Result<Self, Self::Error> {
27 match value {
28 Value::Absent => Err(error::Error::XPDY0002),
29 Value::Sequence(sequence) => Ok(sequence),
30 }
31 }
32}
33
34impl TryFrom<&Value> for sequence::Sequence {
35 type Error = error::Error;
36
37 fn try_from(value: &Value) -> Result<Self, Self::Error> {
38 match value {
39 Value::Absent => Err(error::Error::XPDY0002),
40 Value::Sequence(sequence) => Ok(sequence.clone()),
41 }
42 }
43}
44
45impl<T> From<T> for Value
46where
47 T: Into<sequence::Sequence>,
48{
49 fn from(t: T) -> Self {
50 let sequence: sequence::Sequence = t.into();
51 Value::Sequence(sequence)
52 }
53}