From e49df17d1159507e50434d9d3f866a0c41dd59b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Tue, 2 Feb 2021 20:40:15 +0100 Subject: as_value -> from --- src/lib.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index ec3b1c0..bad1a34 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -124,14 +124,16 @@ impl Type { _ => false, } } +} - pub fn as_value(&self) -> Value { - match self { +impl From<&Type> for Value { + fn from(ty: &Type) -> Self { + match ty { Type::Void => Value::Nil, Type::Blob(i) => Value::Blob(*i), Type::BlobInstance(i) => Value::BlobInstance(*i, Rc::new(RefCell::new(Vec::new()))), Type::Tuple(fields) => { - Value::Tuple(Rc::new(fields.iter().map(|x| x.as_value()).collect())) + Value::Tuple(Rc::new(fields.iter().map(Value::from).collect())) } Type::UnknownType => Value::Unkown, Type::Int => Value::Int(1), @@ -140,11 +142,18 @@ impl Type { Type::String => Value::String(Rc::new("".to_string())), Type::Function(_, _) => Value::Function( Vec::new(), - Rc::new(RefCell::new(Block::from_type(self)))), + Rc::new(RefCell::new(Block::from_type(ty)))), } } } +impl From for Value { + fn from(ty: Type) -> Self { + Value::from(&ty) + } +} + + #[derive(Clone)] pub enum Value { Blob(usize), -- cgit v1.2.1