cel_cxx/values/impls/
list.rs

1use super::*;
2use crate::{types::*, values::*};
3
4use std::collections::{LinkedList, VecDeque};
5
6impl_typed!(
7    List: Value {
8        @[T: TypedValue]
9        Vec<T> => ListType::new(T::value_type()),
10
11        @[T: TypedValue]
12        VecDeque<T> => ListType::new(T::value_type()),
13
14        @[T: TypedValue]
15        LinkedList<T> => ListType::new(T::value_type()),
16
17        @[T: TypedValue]
18        [T] => ListType::new(T::value_type()),
19    }
20);
21
22impl_into!(
23    List: Value {
24        @[T: IntoValue]
25        Vec<T> => |self|
26            self.into_iter()
27                .map(IntoValue::into_value)
28                .collect(),
29
30        @[T: IntoValue + Clone]
31        &[T] => |self|
32            self.iter()
33                .map(IntoValue::into_value)
34                .collect(),
35
36        @[T: IntoValue]
37        VecDeque<T> => |self|
38            self.into_iter()
39                .map(IntoValue::into_value)
40                .collect(),
41
42        @[T: IntoValue]
43        LinkedList<T> => |self|
44            self.into_iter()
45                .map(IntoValue::into_value)
46                .collect(),
47    }
48);
49
50impl_from_list!(
51    #[adder = push]
52    Vec,
53    #[adder = push_back]
54    VecDeque,
55    #[adder = push_back]
56    LinkedList,
57);