From 323a38db3a20c342bf740035a9f69b8881954cf6 Mon Sep 17 00:00:00 2001 From: soup Date: Sun, 19 May 2024 03:16:51 -0400 Subject: [PATCH] Vec impl --- src/lib.rs | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index cde60ca..829b229 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -295,7 +295,37 @@ where } } -mod build {} +impl Value for Vec +where + T: Value, +{ + fn print(&self, w: &mut String) { + for v in self.iter() { + v.print(w) + } + } + + fn lookup(&self, name: &str) -> Option<&dyn Value> { + let idx: usize = name.parse().ok()?; + self.get(idx).map(|v| v as &dyn Value) + } + + fn has(&self) -> Option<&dyn Value> { + if self.is_empty() { + None + } else { + Some(self) + } + } + + fn if_(&self) -> bool { + self.is_empty() + } + + fn for_(&self, index: usize) -> Option<&dyn Value> { + self.get(index).map(|v| v as &dyn Value) + } +} pub struct Newt { ast: Ast,