diff --git a/src/color.rs b/src/color.rs index 1c5f951..62f5855 100644 --- a/src/color.rs +++ b/src/color.rs @@ -1,4 +1,4 @@ -#[derive(Default, PartialEq, Debug)] +#[derive(Default, PartialEq, Debug, Clone)] pub struct Color { pub red: u8, pub green: u8, diff --git a/src/hid_wrapper.rs b/src/hid_wrapper/mod.rs similarity index 100% rename from src/hid_wrapper.rs rename to src/hid_wrapper/mod.rs diff --git a/src/rgb_controller.rs b/src/rgb_controller/mod.rs similarity index 100% rename from src/rgb_controller.rs rename to src/rgb_controller/mod.rs diff --git a/src/rgb_controller/preset.rs b/src/rgb_controller/preset.rs index c77c95c..e507ca4 100644 --- a/src/rgb_controller/preset.rs +++ b/src/rgb_controller/preset.rs @@ -2,6 +2,7 @@ use crate::Color; use crate::EFFECTS; use crate::EffectInfo; use crate::Effects; +use crate::RGBController; #[derive(PartialEq, Debug)] pub struct Preset { @@ -71,3 +72,9 @@ impl Default for Preset { ) } } + +impl Preset { + pub fn apply_to_device(&self, mut controller: RGBController) -> Result{ + controller.set_effect(self.effect.clone(), self.color.clone(), self.full_color, self.brightness, self.speed, self.direction, self.keymap) + } +} \ No newline at end of file diff --git a/src/save_preset.rs b/src/save_preset.rs index 6cb4548..9e404de 100644 --- a/src/save_preset.rs +++ b/src/save_preset.rs @@ -60,11 +60,11 @@ impl Preset { /// # Errors /// If this function fails a `SavePresetError` will be returned pub fn _encode_to_buffer(&self) -> Result, SavePresetError> { - let effect_info: EffectInfo = EFFECTS[usize::from(self.effect.to_u8() - 1)].clone(); + let effect_info: EffectInfo = EFFECTS[self.effect.to_u8() as usize - 1].clone(); let mut buffer: Vec = vec![MAGIC_NUMBER_1, MAGIC_NUMBER_2, VERSION]; buffer - .push(self.effect.to_u8() + (u8::from(self.full_color) * 128) + (self.direction * 32)); //Effect id, full_color, and direction in a single byte + .push(self.effect.to_u8() + self.full_color as u8 * 128 + self.direction * 32); //Effect id, full_color, and direction in a single byte if !self.full_color && effect_info.can_set_color { buffer.extend(&self.color.to_array()); @@ -145,7 +145,7 @@ impl Preset { let effect_id: u8 = effect_byte & 0b0001_1111; save.effect = Effects::from_u8(effect_id).ok_or(LoadPresetError::InvalidOrCorruptedFile)?; - let effect_info: EffectInfo = EFFECTS[usize::from(save.effect.to_u8() - 1)].clone(); + let effect_info: EffectInfo = EFFECTS[save.effect.to_u8() as usize - 1].clone(); if !save.full_color && effect_info.can_set_color { save.color.red = buffer diff --git a/src/tests.rs b/src/tests/mod.rs similarity index 83% rename from src/tests.rs rename to src/tests/mod.rs index 0a5f462..fcab1e5 100644 --- a/src/tests.rs +++ b/src/tests/mod.rs @@ -1,4 +1,4 @@ #[cfg(feature = "preset_file_saving")] mod preset_saving; -mod keymap; +mod keymap; \ No newline at end of file