Compare commits
1 commit
03726a9950
...
7ea486dea6
Author | SHA1 | Date | |
---|---|---|---|
7ea486dea6 |
2 changed files with 8 additions and 5 deletions
|
@ -34,14 +34,14 @@ fn main() {
|
||||||
thread::sleep(time::Duration::from_millis(250));
|
thread::sleep(time::Duration::from_millis(250));
|
||||||
let mut lights = lock.write().unwrap();
|
let mut lights = lock.write().unwrap();
|
||||||
let pattern = format_multiline("unit");
|
let pattern = format_multiline("unit");
|
||||||
let res: Result<Vec<Box<dyn Pattern>>> = pattern.iter()
|
let res: Result<Vec<Box<dyn Pattern>>, ParseError> = pattern.iter()
|
||||||
.map(|x: &Vec<String>| parse_line((*x).clone()))
|
.map(|x: &Vec<String>| parse_line((*x).clone()))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if res.is_ok() {
|
if res.is_ok() {
|
||||||
let v: Vec<Box<dyn Pattern>> = res.unwrap();
|
let v: Vec<Box<dyn Pattern>> = res.unwrap();
|
||||||
for x in 0..v.len() {
|
for x in 0..v.len() {
|
||||||
v[x].execute(&mut lights);
|
lights = *(v[x].execute(&mut lights));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ use std::sync::RwLockWriteGuard;
|
||||||
pub type ParseError = Box<dyn std::error::Error>;
|
pub type ParseError = Box<dyn std::error::Error>;
|
||||||
|
|
||||||
pub trait Pattern<'a> {
|
pub trait Pattern<'a> {
|
||||||
fn execute(&self, values: &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]>);
|
fn execute(&self, values: &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]>) -> &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]>;
|
||||||
fn parse(args: Vec<String>) -> Result<Self, ParseError> where Self: Sized;
|
fn parse(args: Vec<String>) -> Result<Self, ParseError> where Self: Sized;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,9 @@ impl<'a> TryFrom<Vec<String>> for Box<dyn Pattern<'a>> {
|
||||||
|
|
||||||
struct Unit;
|
struct Unit;
|
||||||
impl<'a> Pattern<'a> for Unit {
|
impl<'a> Pattern<'a> for Unit {
|
||||||
fn execute(&self, _values: &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]>) {}
|
fn execute(&self, values: &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]>) -> &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]> {
|
||||||
|
values
|
||||||
|
}
|
||||||
fn parse(_args: Vec<String>) -> Result<Self, ParseError> {
|
fn parse(_args: Vec<String>) -> Result<Self, ParseError> {
|
||||||
Ok(Unit {})
|
Ok(Unit {})
|
||||||
}
|
}
|
||||||
|
@ -38,7 +40,7 @@ struct Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Pattern<'a> for Value {
|
impl<'a> Pattern<'a> for Value {
|
||||||
fn execute(&self, values: &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]>) {
|
fn execute(&self, values: &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]>) -> &'a mut RwLockWriteGuard<'_, [RawColor; crate::LED_SIZE]> {
|
||||||
for i in 0..crate::LED_SIZE {
|
for i in 0..crate::LED_SIZE {
|
||||||
let mut color: RawColor = (*values)[i];
|
let mut color: RawColor = (*values)[i];
|
||||||
if self.r.is_some() {
|
if self.r.is_some() {
|
||||||
|
@ -52,6 +54,7 @@ impl<'a> Pattern<'a> for Value {
|
||||||
}
|
}
|
||||||
(*values)[i] = color;
|
(*values)[i] = color;
|
||||||
}
|
}
|
||||||
|
values
|
||||||
}
|
}
|
||||||
fn parse(args: Vec<String>) -> Result<Self, ParseError> {
|
fn parse(args: Vec<String>) -> Result<Self, ParseError> {
|
||||||
let param1 = args[1].parse::<u8>();
|
let param1 = args[1].parse::<u8>();
|
||||||
|
|
Loading…
Reference in a new issue