aboutsummaryrefslogtreecommitdiff
path: root/src/sexp/util.rs
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-03 13:07:36 +0300
committerJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-03 13:07:36 +0300
commit00cf7eb0a1316ce0e330ed9a1e218fc60ae0b8cd (patch)
tree24aca27976b8442ee37eb7b40d5df950a7b5d39a /src/sexp/util.rs
parent9121a0b782d2cd6551a393f1d3a79c7b092e4873 (diff)
downloadmyslip-00cf7eb0a1316ce0e330ed9a1e218fc60ae0b8cd.tar.gz
myslip-00cf7eb0a1316ce0e330ed9a1e218fc60ae0b8cd.zip
Implemented type_check, added method parts for SExp
'parts' is different from 'into_vec', because it doesn't require flat structure and always succeeds
Diffstat (limited to 'src/sexp/util.rs')
-rw-r--r--src/sexp/util.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/sexp/util.rs b/src/sexp/util.rs
index 70ac152..0818e6b 100644
--- a/src/sexp/util.rs
+++ b/src/sexp/util.rs
@@ -58,4 +58,16 @@ impl SExp {
_ => Err("expected list, found atom".to_string()),
}
}
+
+ pub fn parts(self) -> Vec<SExp> {
+ match self {
+ Atom(x) => vec![Atom(x)],
+ SCons(a, b) if *b == Atom(Nil) => vec![*a],
+ SCons(a, b) => {
+ let mut res = vec![*a];
+ res.extend_from_slice(&(*b).parts());
+ res
+ },
+ }
+ }
}