Replace some unwrap by Result
[temp2RGB.git] / src / asus_aura_usb.rs
index e639d38..31a2b27 100644 (file)
@@ -27,38 +27,36 @@ pub struct Device {
 }
 
 impl Device {
-    pub fn new(api: &hidapi::HidApi, motherboard: Motherboard) -> Self {
+    pub fn new(api: &hidapi::HidApi, motherboard: Motherboard) -> anyhow::Result<Self> {
         let device = Device {
-            device: api
-                .open(
-                    VID,
-                    match motherboard {
-                        Motherboard::Asus650e => PID_650_E,
-                        Motherboard::AsusCrosshairVIIIHero => PID_CROSSHAIR,
-                    },
-                )
-                .unwrap(),
+            device: api.open(
+                VID,
+                match motherboard {
+                    Motherboard::Asus650e => PID_650_E,
+                    Motherboard::AsusCrosshairVIIIHero => PID_CROSSHAIR,
+                },
+            )?,
             motherboard,
         };
 
-        device.set_fixed_mode();
-        device
+        device.set_fixed_mode()?;
+        Ok(device)
     }
 
-    pub fn get_firmware_string(&self) -> String {
+    pub fn get_firmware_string(&self) -> anyhow::Result<String> {
         let mut buffer = [0u8; 65];
         buffer[0] = 0xEC;
         buffer[1] = AURA_REQUEST_FIRMWARE_VERSION;
-        let n_write = self.device.write(&buffer).unwrap();
+        let n_write = self.device.write(&buffer)?;
         assert_eq!(n_write, 65);
 
         buffer.fill(0);
-        let n_read = self.device.read(&mut buffer).unwrap();
+        let n_read = self.device.read(&mut buffer)?;
         assert_eq!(n_read, 65);
         assert_eq!(buffer[0], 0xEC);
         assert_eq!(buffer[1], 0x02);
 
-        String::from(str::from_utf8(&buffer[2..17]).unwrap())
+        Ok(String::from(str::from_utf8(&buffer[2..17])?))
     }
 
     /*
@@ -76,25 +74,23 @@ impl Device {
     00 00 00 00 00 00
     00 00 00 00 00 00
     */
-    pub fn get_configuration_table(&self) -> [u8; 60] {
+    pub fn get_configuration_table(&self) -> anyhow::Result<[u8; 60]> {
         let mut buffer = [0u8; 65];
         buffer[0] = 0xEC;
         buffer[1] = AURA_REQUEST_CONFIG_TABLE;
-        let n_write = self.device.write(&buffer).unwrap();
+        let n_write = self.device.write(&buffer)?;
         assert_eq!(n_write, 65);
 
         buffer.fill(0);
-        let n_read = self.device.read(&mut buffer).unwrap();
+        let n_read = self.device.read(&mut buffer)?;
         assert_eq!(n_read, 65);
         assert_eq!(buffer[0], 0xEC);
         assert_eq!(buffer[1], 0x30);
 
-        buffer[4..64]
-            .try_into()
-            .expect("slice with incorrect length")
+        Ok(buffer[4..64].try_into()?)
     }
 
-    fn set_fixed_mode(&self) {
+    fn set_fixed_mode(&self) -> anyhow::Result<()> {
         let mut buffer = [0u8; 65];
         buffer[0] = 0xEC;
         buffer[1] = 0x35; // Control mode.
@@ -103,12 +99,13 @@ impl Device {
 
         for channel_effect_id in 0..2 {
             buffer[2] = channel_effect_id; // Channel effect id: Fixed.
-            let n_write = self.device.write(&buffer).unwrap();
+            let n_write = self.device.write(&buffer)?;
             assert_eq!(n_write, 65);
         }
+        Ok(())
     }
 
-    pub fn set_color(&self, color: &RGB) {
+    pub fn set_color(&self, color: &RGB) -> anyhow::Result<()> {
         let mut buffer = [0u8; 65];
         buffer[0] = 0xEC;
         buffer[1] = 0x36;
@@ -126,17 +123,19 @@ impl Device {
             buffer[5 + 3 * n + 2] = color.blue;
         }
 
-        let n_write = self.device.write(&buffer).unwrap();
+        let n_write = self.device.write(&buffer)?;
         assert_eq!(n_write, 65);
+        Ok(())
     }
 
-    pub fn save_current_color(&self) {
+    pub fn save_current_color(&self) -> anyhow::Result<()> {
         let mut buffer = [0u8; 65];
         buffer[0] = 0xEC;
         buffer[1] = 0x3F;
         buffer[2] = 0x55;
 
-        let n_write = self.device.write(&buffer).unwrap();
+        let n_write = self.device.write(&buffer)?;
         assert_eq!(n_write, 65);
+        Ok(())
     }
 }