1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use {
    crate::Value,
    std::{fmt, sync::Arc},
};

#[derive(Clone, Debug, Hash, PartialEq)]
pub struct ValueTuple(Arc<[Value]>);

impl ValueTuple {
    #[inline]
    pub fn data(&self) -> &[Value] {
        &self.0
    }
}

impl fmt::Display for ValueTuple {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "(")?;
        for (i, value) in self.0.iter().enumerate() {
            if i > 0 {
                write!(f, ", ")?;
            }
            write!(f, "{:#}", value)?;
        }
        write!(f, ")")
    }
}

impl From<&[Value]> for ValueTuple {
    #[inline]
    fn from(v: &[Value]) -> Self {
        Self(v.into())
    }
}

impl From<Vec<Value>> for ValueTuple {
    #[inline]
    fn from(v: Vec<Value>) -> Self {
        Self(v.into())
    }
}