Skip to content

Commit 1be8830

Browse files
committed
Add convenience macro for lists
1 parent ce122e5 commit 1be8830

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

src/persistent_list.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,36 @@ pub enum PersistentList {
1414
Cons(Rc<Value>, Rc<PersistentList>, i32),
1515
Empty,
1616
}
17+
// Experimental
18+
/// list!(sym!("+") 1 2);
19+
/// Meant to look closer to Clojure's native list syntax, to give us some Clojuresque sugar
20+
#[macro_export]
21+
macro_rules! list {
22+
( $($val:expr) *) => {
23+
{
24+
let mut temp_list_as_vec = vec![];
25+
$(
26+
temp_list_as_vec.push($val.to_rc_value());
27+
)*
28+
temp_list_as_vec.into_iter().collect::<crate::persistent_list::PersistentList>()
29+
}
30+
};
31+
}
32+
/// list_val!(sym!("+") 1 2);
33+
/// Meant to look closer to Clojure's native list syntax, to give us some Clojuresque sugar
34+
/// Returns a Value instead of a PersistentList
35+
#[macro_export]
36+
macro_rules! list_val {
37+
( $($val:expr) *) => {
38+
{
39+
let mut temp_list_as_vec = vec![];
40+
$(
41+
temp_list_as_vec.push($val.to_rc_value());
42+
)*
43+
temp_list_as_vec.into_iter().collect::<crate::persistent_list::PersistentList>().to_value()
44+
}
45+
};
46+
}
1747
// @TODO definitely don't do this
1848
#[derive(Debug, Clone, Hash)]
1949
struct EmptyHash {}

0 commit comments

Comments
 (0)