diff --git a/src/util/pattern.rs b/src/util/pattern.rs index a857bff..e8d37d0 100644 --- a/src/util/pattern.rs +++ b/src/util/pattern.rs @@ -6,16 +6,17 @@ use std::{ type ParseError = Box; -trait Pattern<'a> { - pub fn execute(&self, values: &'a mut [RawColor]); - pub fn parse(args: Vec) -> Result; +pub trait Pattern<'a> { + fn execute(&self, values: &'a mut [RawColor]); + fn parse(args: Vec) -> Result where Self: Sized; } impl<'a> TryFrom> for Box> { - fn try_from(s: Vec) -> Result { + type Error = ParseError; + fn try_from(s: Vec) -> Result { match s[0].as_str() { - "unit" => Unit::parse(s), - "val" => Value::parse(s), + "unit" => Ok(Box::new(Unit::parse(s).unwrap()) as Box), + "val" => Ok(Box::new(Value::parse(s).unwrap()) as Box), _ => Err("No Match".into()) } } @@ -87,7 +88,7 @@ impl<'a> Pattern<'a> for Value { }) } }, - Err(e) => Err(e) + Err(e) => Err(Box::new(e)) } } } @@ -96,4 +97,4 @@ impl<'a> Pattern<'a> for Value { pub fn parse_line(v: Vec) -> Result>, ParseError> { let res: Result, ParseError> = v.try_into(); res -} \ No newline at end of file +}