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,