microcad_lang/value/
value_list.rs1use crate::{ty::*, value::*};
7use derive_more::{Deref, DerefMut};
8
9#[derive(Clone, Default, Deref, DerefMut)]
11pub struct ValueList(Vec<Value>);
12
13impl ValueList {
14 pub fn new(list: Vec<Value>) -> Self {
16 Self(list)
17 }
18
19 pub fn types(&self) -> TypeList {
21 TypeList::new(
22 self.0
23 .iter()
24 .map(|v| v.ty())
25 .collect::<Vec<Type>>()
26 .into_iter()
27 .collect(),
28 )
29 }
30}
31
32impl IntoIterator for ValueList {
33 type Item = Value;
34 type IntoIter = std::vec::IntoIter<Self::Item>;
35
36 fn into_iter(self) -> Self::IntoIter {
37 self.0.into_iter()
38 }
39}
40
41impl PartialEq for ValueList {
42 fn eq(&self, other: &Self) -> bool {
43 self.0 == other.0
44 }
45}
46
47impl std::iter::FromIterator<Value> for ValueList {
48 fn from_iter<T: IntoIterator<Item = Value>>(iter: T) -> Self {
49 let vec = Vec::from_iter(iter);
50 ValueList(vec)
51 }
52}
53
54impl std::fmt::Debug for ValueList {
55 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
56 write!(
57 f,
58 "{}",
59 self.iter()
60 .map(|value| format!("{value}"))
61 .collect::<Vec<_>>()
62 .join(", ")
63 )
64 }
65}