add fill_unstable and use rust fmt
This commit is contained in:
		
							parent
							
								
									ae215ce252
								
							
						
					
					
						commit
						4dd5587b49
					
				@ -33,7 +33,6 @@ async fn main() -> bluer::Result<()> {
 | 
			
		||||
    let spectacle = Spectacle::from(config);
 | 
			
		||||
    let spectacle = Arc::new(Mutex::new(spectacle));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let adapter = bluetooth::create_session().await?;
 | 
			
		||||
    let (tx_scan, rx_scan) = mpsc::channel(3);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,27 +1,29 @@
 | 
			
		||||
mod scanner;
 | 
			
		||||
mod fade;
 | 
			
		||||
mod blink;
 | 
			
		||||
mod color_wipe;
 | 
			
		||||
mod rainbow;
 | 
			
		||||
mod fade;
 | 
			
		||||
mod fade_random;
 | 
			
		||||
mod fade_unstable;
 | 
			
		||||
mod fill_random;
 | 
			
		||||
mod fill_unstable;
 | 
			
		||||
mod blink;
 | 
			
		||||
mod rain;
 | 
			
		||||
mod fade_random;
 | 
			
		||||
mod rainbow;
 | 
			
		||||
mod scanner;
 | 
			
		||||
 | 
			
		||||
use serde_derive::{Deserialize, Serialize};
 | 
			
		||||
use std::fmt;
 | 
			
		||||
use std::ops::{AddAssign, Div, Index, IndexMut, SubAssign};
 | 
			
		||||
use rand::Rng;
 | 
			
		||||
use rand::rngs::ThreadRng;
 | 
			
		||||
use crate::patterns::blink::Blink;
 | 
			
		||||
use crate::patterns::color_wipe::ColorWipe;
 | 
			
		||||
use crate::patterns::fade::Fade;
 | 
			
		||||
use crate::patterns::fade_random::FadeRandom;
 | 
			
		||||
use crate::patterns::fade_unstable::FadeUnstable;
 | 
			
		||||
use crate::patterns::fill_random::FillRandom;
 | 
			
		||||
use crate::patterns::fill_unstable::FillUnstable;
 | 
			
		||||
use crate::patterns::rain::Rain;
 | 
			
		||||
use crate::patterns::rainbow::Rainbow;
 | 
			
		||||
use crate::patterns::scanner::Scanner;
 | 
			
		||||
use rand::rngs::ThreadRng;
 | 
			
		||||
use rand::Rng;
 | 
			
		||||
use serde_derive::{Deserialize, Serialize};
 | 
			
		||||
use std::fmt;
 | 
			
		||||
use std::ops::{AddAssign, Div, Index, IndexMut, SubAssign};
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Deserialize, Debug, Eq, Hash, PartialEq, Copy, Clone)]
 | 
			
		||||
#[serde(tag = "type")]
 | 
			
		||||
@ -34,10 +36,11 @@ pub(crate) enum Patterns<const N: usize> {
 | 
			
		||||
    FillUnstable(FillUnstable<N>),
 | 
			
		||||
    Blink(Blink<N>),
 | 
			
		||||
    Rain(Rain<N>),
 | 
			
		||||
    FadeRandom(FadeRandom<N>)
 | 
			
		||||
    FadeRandom(FadeRandom<N>),
 | 
			
		||||
    FadeUnstable(FadeUnstable<N>),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub trait Pattern : Iterator {
 | 
			
		||||
pub trait Pattern: Iterator {
 | 
			
		||||
    type Strip;
 | 
			
		||||
 | 
			
		||||
    fn init(&mut self) -> Option<Self::Strip>;
 | 
			
		||||
@ -58,6 +61,7 @@ impl<const N: usize> Iterator for Patterns<N> {
 | 
			
		||||
            Patterns::Blink(p) => p.next(),
 | 
			
		||||
            Patterns::Rain(p) => p.next(),
 | 
			
		||||
            Patterns::FadeRandom(p) => p.next(),
 | 
			
		||||
            Patterns::FadeUnstable(p) => p.next(),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -76,6 +80,7 @@ impl<const N: usize> Pattern for Patterns<N> {
 | 
			
		||||
            Patterns::Blink(p) => p.init(),
 | 
			
		||||
            Patterns::Rain(p) => p.init(),
 | 
			
		||||
            Patterns::FadeRandom(p) => p.init(),
 | 
			
		||||
            Patterns::FadeUnstable(p) => p.init(),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -90,6 +95,7 @@ impl<const N: usize> Pattern for Patterns<N> {
 | 
			
		||||
            Patterns::Blink(p) => p.is_last_iteration(),
 | 
			
		||||
            Patterns::Rain(p) => p.is_last_iteration(),
 | 
			
		||||
            Patterns::FadeRandom(p) => p.is_last_iteration(),
 | 
			
		||||
            Patterns::FadeUnstable(p) => p.is_last_iteration(),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -164,11 +170,7 @@ impl PixelColor {
 | 
			
		||||
            green = self.green.saturating_sub(green_delta);
 | 
			
		||||
            blue = self.blue.saturating_sub(blue_delta);
 | 
			
		||||
        }
 | 
			
		||||
        PixelColor {
 | 
			
		||||
            red,
 | 
			
		||||
            green,
 | 
			
		||||
            blue
 | 
			
		||||
        }
 | 
			
		||||
        PixelColor { red, green, blue }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -210,7 +212,9 @@ impl<const N: usize> Strip<N> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn new(color: PixelColor) -> Strip<N> {
 | 
			
		||||
        Strip { 0: [Some(color); N] }
 | 
			
		||||
        Strip {
 | 
			
		||||
            0: [Some(color); N],
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn fill(&mut self, color: PixelColor) {
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
use crate::patterns::fade::Fade;
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use crate::patterns::Pattern;
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # Blink
 | 
			
		||||
///
 | 
			
		||||
@ -23,7 +23,7 @@ impl<const N: usize> Pattern for Blink<N> {
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => { false }
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use crate::patterns::{Pattern, PixelColor};
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # Colorwipe pattern
 | 
			
		||||
/// every pattern implement the iterator trait
 | 
			
		||||
@ -33,7 +33,7 @@ impl<const N: usize> Pattern for ColorWipe<N> {
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => { false }
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
@ -59,8 +59,6 @@ impl<const N: usize> Iterator for ColorWipe<N> {
 | 
			
		||||
        }
 | 
			
		||||
        let iteration = self.current_iteration % N;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        for i in 0..iteration {
 | 
			
		||||
            strip[i] = Some(self.color);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use crate::patterns::{Pattern, PixelColor};
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # fade pattern
 | 
			
		||||
/// fade from one color to an other
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
use crate::patterns::fade::Fade;
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use crate::patterns::Pattern;
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # Blink
 | 
			
		||||
///
 | 
			
		||||
@ -24,7 +24,7 @@ impl<const N: usize> Pattern for FadeRandom<N> {
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => { false }
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
@ -42,17 +42,16 @@ impl<const N: usize> Iterator for FadeRandom<N> {
 | 
			
		||||
    fn next(&mut self) -> Option<Self::Item> {
 | 
			
		||||
        let strip = self.fade.next();
 | 
			
		||||
        match strip {
 | 
			
		||||
            None => { None }
 | 
			
		||||
            None => None,
 | 
			
		||||
            Some(mut fade) => {
 | 
			
		||||
                let rng = rand::thread_rng();
 | 
			
		||||
                for i in 0..N {
 | 
			
		||||
                    match fade[i] {
 | 
			
		||||
                        None => { }
 | 
			
		||||
                        None => {}
 | 
			
		||||
                        Some(pixel) => {
 | 
			
		||||
                            fade[i] = Some(pixel.random_delta(self.stability, &mut rng.clone()))
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                Some(fade)
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										54
									
								
								src/patterns/fade_unstable.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/patterns/fade_unstable.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,54 @@
 | 
			
		||||
use crate::patterns::fade::Fade;
 | 
			
		||||
use crate::patterns::Pattern;
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # Blink
 | 
			
		||||
///
 | 
			
		||||
/// fade from one color to an other then go back several times
 | 
			
		||||
#[derive(Serialize, Deserialize, Debug, Eq, Hash, PartialEq, Copy, Clone)]
 | 
			
		||||
pub struct FadeUnstable<const N: usize> {
 | 
			
		||||
    #[serde(default)]
 | 
			
		||||
    pub(crate) current_iteration: usize,
 | 
			
		||||
    pub(crate) max_iteration: Option<usize>,
 | 
			
		||||
    pub(crate) stability: usize,
 | 
			
		||||
    fade: Fade<N>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<const N: usize> Pattern for FadeUnstable<N> {
 | 
			
		||||
    type Strip = Strip<N>;
 | 
			
		||||
 | 
			
		||||
    fn init(&mut self) -> Option<Self::Strip> {
 | 
			
		||||
        None
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
                } else {
 | 
			
		||||
                    false
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<const N: usize> Iterator for FadeUnstable<N> {
 | 
			
		||||
    type Item = Strip<N>;
 | 
			
		||||
 | 
			
		||||
    fn next(&mut self) -> Option<Self::Item> {
 | 
			
		||||
        let strip = self.fade.next();
 | 
			
		||||
        match strip {
 | 
			
		||||
            None => None,
 | 
			
		||||
            Some(fade) => {
 | 
			
		||||
                let mut rng = rand::thread_rng();
 | 
			
		||||
                let pixel = fade[0].unwrap().random_delta(self.stability, &mut rng);
 | 
			
		||||
 | 
			
		||||
                Some(Strip::new(pixel))
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use crate::patterns::{Pattern, PixelColor};
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # FillRandom
 | 
			
		||||
///
 | 
			
		||||
@ -23,7 +23,7 @@ impl<const N: usize> Pattern for FillRandom<N> {
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => { false }
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use crate::patterns::{Pattern, PixelColor};
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # FillUnstable
 | 
			
		||||
///
 | 
			
		||||
@ -23,7 +23,7 @@ impl<const N: usize> Pattern for FillUnstable<N> {
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => { false }
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
use rand::Rng;
 | 
			
		||||
use crate::patterns::{Pattern, PixelColor};
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use rand::Rng;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # rain pattern
 | 
			
		||||
/// randomly fall colors from top or bottom.
 | 
			
		||||
@ -23,7 +23,7 @@ pub struct Rain<const N: usize> {
 | 
			
		||||
    pub(crate) stability: usize,
 | 
			
		||||
    pub(crate) lines: usize,
 | 
			
		||||
    #[serde(skip)]
 | 
			
		||||
    drops : Strip<N>,
 | 
			
		||||
    drops: Strip<N>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<const N: usize> Pattern for Rain<N> {
 | 
			
		||||
@ -40,7 +40,7 @@ impl<const N: usize> Pattern for Rain<N> {
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => { false }
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
@ -58,17 +58,17 @@ impl<const N: usize> Iterator for Rain<N> {
 | 
			
		||||
    fn next(&mut self) -> Option<Self::Item> {
 | 
			
		||||
        let mut strip = Strip::<N>::default();
 | 
			
		||||
 | 
			
		||||
        for i in 0..(N-self.lines) {
 | 
			
		||||
            strip[i+self.lines] = self.drops[i];
 | 
			
		||||
        for i in 0..(N - self.lines) {
 | 
			
		||||
            strip[i + self.lines] = self.drops[i];
 | 
			
		||||
        }
 | 
			
		||||
        let mut rng = rand::thread_rng();
 | 
			
		||||
        for i in 0..self.lines {
 | 
			
		||||
            if rng.gen_bool(self.stability as f64 / 100 as f64) {
 | 
			
		||||
                strip[i] = Some(self.color);
 | 
			
		||||
            } else {
 | 
			
		||||
                let c = strip[i+self.lines];
 | 
			
		||||
                let c = strip[i + self.lines];
 | 
			
		||||
                if self.background_color != c && c != Some(PixelColor::default()) {
 | 
			
		||||
                    strip[i] = Some(strip[i+self.lines].unwrap()/ 2);
 | 
			
		||||
                    strip[i] = Some(strip[i + self.lines].unwrap() / 2);
 | 
			
		||||
                } else {
 | 
			
		||||
                    strip[i] = self.background_color;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use crate::patterns::{Pattern, PixelColor};
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # Rainbow pattern
 | 
			
		||||
///
 | 
			
		||||
@ -29,7 +29,7 @@ impl<const N: usize> Pattern for Rainbow<N> {
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => { false }
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use crate::patterns::{Pattern, PixelColor};
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use serde::{Serialize, Deserialize};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// # scanner pattern
 | 
			
		||||
/// color one pixel with a color and leave a train of this color fading to black
 | 
			
		||||
@ -18,7 +18,7 @@ pub struct Scanner<const N: usize> {
 | 
			
		||||
    pub(crate) max_iteration: Option<usize>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<const N:usize> Pattern for Scanner<N> {
 | 
			
		||||
impl<const N: usize> Pattern for Scanner<N> {
 | 
			
		||||
    type Strip = Strip<N>;
 | 
			
		||||
 | 
			
		||||
    fn init(&mut self) -> Option<Self::Strip> {
 | 
			
		||||
@ -31,7 +31,7 @@ impl<const N:usize> Pattern for Scanner<N> {
 | 
			
		||||
 | 
			
		||||
    fn is_last_iteration(&self) -> bool {
 | 
			
		||||
        match self.max_iteration {
 | 
			
		||||
            None => { false }
 | 
			
		||||
            None => false,
 | 
			
		||||
            Some(max_iter) => {
 | 
			
		||||
                if self.current_iteration >= max_iter {
 | 
			
		||||
                    true
 | 
			
		||||
@ -51,7 +51,7 @@ impl<const N: usize> Iterator for Scanner<N> {
 | 
			
		||||
            return None;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let mut strip : Strip<N>;
 | 
			
		||||
        let mut strip: Strip<N>;
 | 
			
		||||
 | 
			
		||||
        if let Some(color) = self.background_color {
 | 
			
		||||
            strip = Strip::new(color);
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
use crate::config::Config;
 | 
			
		||||
use crate::patterns::{Patterns, PixelColor, Pattern};
 | 
			
		||||
use crate::patterns::{Pattern, Patterns, PixelColor};
 | 
			
		||||
use crate::Strip;
 | 
			
		||||
use bluer::Address;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
@ -10,9 +10,8 @@ use std::time::Duration;
 | 
			
		||||
use tokio::sync::watch::{Receiver, Sender};
 | 
			
		||||
 | 
			
		||||
pub(crate) mod period {
 | 
			
		||||
    use std::time::Duration;
 | 
			
		||||
    use serde::{de::Error as _, Deserialize, Deserializer};
 | 
			
		||||
 | 
			
		||||
    use std::time::Duration;
 | 
			
		||||
 | 
			
		||||
    /// Custom deserializer for period from millisecond value
 | 
			
		||||
    ///
 | 
			
		||||
@ -27,7 +26,8 @@ pub(crate) mod period {
 | 
			
		||||
        D: Deserializer<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        String::deserialize(deserializer)?
 | 
			
		||||
            .parse::<u64>().and_then(|d| Ok(Duration::from_millis(d)))
 | 
			
		||||
            .parse::<u64>()
 | 
			
		||||
            .and_then(|d| Ok(Duration::from_millis(d)))
 | 
			
		||||
            .map_err(|e| D::Error::custom(format!("{}", e)))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -41,8 +41,6 @@ pub struct Context<const N: usize> {
 | 
			
		||||
 | 
			
		||||
pub(crate) type DeviceSequence<const N: usize> = Vec<Context<N>>;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pub async fn runner_loop<const N: usize>(runner: DeviceSequence<N>, tx: Sender<Strip<N>>) {
 | 
			
		||||
    let mut background = Strip::<N>::default();
 | 
			
		||||
    for mut context in runner {
 | 
			
		||||
@ -151,7 +149,6 @@ impl<const N: usize> Spectacle<N> {
 | 
			
		||||
        }
 | 
			
		||||
        joinhandles
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<const N: usize> From<Config<N>> for Spectacle<N> {
 | 
			
		||||
@ -178,7 +175,6 @@ impl<const N: usize> From<Config<N>> for Spectacle<N> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
    use super::*;
 | 
			
		||||
@ -188,20 +184,20 @@ mod tests {
 | 
			
		||||
        let pixel_entry = PixelColor {
 | 
			
		||||
            red: 10,
 | 
			
		||||
            green: 10,
 | 
			
		||||
            blue: 10
 | 
			
		||||
            blue: 10,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        let pixel_mask = PixelColor {
 | 
			
		||||
            red: 20,
 | 
			
		||||
            green: 20,
 | 
			
		||||
            blue: 20
 | 
			
		||||
            blue: 20,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        let mut entry = Strip::<5>::new(pixel_entry) ;
 | 
			
		||||
        let mut entry = Strip::<5>::new(pixel_entry);
 | 
			
		||||
        entry[0] = None;
 | 
			
		||||
        entry[1] = None;
 | 
			
		||||
 | 
			
		||||
        let mut mask = Strip::<5>::new(pixel_mask) ;
 | 
			
		||||
        let mut mask = Strip::<5>::new(pixel_mask);
 | 
			
		||||
        mask[0] = None;
 | 
			
		||||
 | 
			
		||||
        let mut expected = entry.clone();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user