[opentitanlib] Add alert_handler_reg tests

Signed-off-by: Jon Flatley <jflat@google.com>
diff --git a/BUILD.bazel b/BUILD.bazel
index 4a52beb..531e515 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -142,6 +142,7 @@
     name = "rust_analyzer",
     targets = [
         "//sw/host/opentitanlib:opentitanlib",
+        "//sw/host/opentitanlib/opentitantool_derive:opentitantool_derive",
         "//sw/host/opentitansession:opentitansession",
         "//sw/host/opentitantool:opentitantool",
     ],
diff --git a/sw/host/opentitanlib/src/otp/alert_handler.rs b/sw/host/opentitanlib/src/otp/alert_handler.rs
index cc8a1b2..b149408 100644
--- a/sw/host/opentitanlib/src/otp/alert_handler.rs
+++ b/sw/host/opentitanlib/src/otp/alert_handler.rs
@@ -14,7 +14,7 @@
 use std::convert::TryFrom;
 
 /// ALERT_HANDLER_ALERT_CLASS related register values.
-#[derive(Clone, Copy)]
+#[derive(Clone, Copy, Debug, PartialEq)]
 struct AlertClassRegs {
     regwen: u32,
     ctrl: u32,
@@ -24,6 +24,7 @@
 }
 
 /// Register values for alert_handler used in CRC32 calculation.
+#[derive(Debug, PartialEq)]
 pub struct AlertRegs {
     /// ALERT_HANDLER_LOC_ALERT_REGWEN
     regwen: [u32; ALERT_HANDLER_ALERT_REGWEN_MULTIREG_COUNT as usize],
@@ -41,6 +42,7 @@
     class_regs: [AlertClassRegs; ALERT_HANDLER_PARAM_N_CLASSES as usize],
 }
 
+// TODO: Use bindgen to produce the following enum definitions.
 /// Alert classification values.
 ///
 /// Based on values generated by sparse-fsm-encode.py and defined in
@@ -130,6 +132,8 @@
 }
 
 impl AlertRegs {
+    /// Compute the CRC32 of the internal register values to match the value produced by
+    /// `sw/device/silicon_creator/lib/drivers/alert.h:alert_config_crc32`.
     pub fn crc32(self) -> u32 {
         let crc = new_crc();
         let mut digest = crc.digest();
@@ -137,55 +141,49 @@
         digest.finalize()
     }
 
-    pub fn new<T: OtpRead>(lc_state: LcStateVal, otp: &T) -> Result<Self> {
+    /// Create the set of alert_handler register values from a given lifecycle state and OTP.
+    ///
+    /// The internal fields of `AlertRegs` should match those produced on the device after
+    /// alert_handler is configured in `sw/device/silicon_creator/lib/shutdown.h:shutdown_init`.
+    pub fn try_new<T: OtpRead>(lc_state: LcStateVal, otp: &T) -> Result<Self> {
         let mut alert = AlertRegs::default();
 
         let lc_shift = match lc_state {
             LcStateVal::Prod => 0,
-            LcStateVal::ProdEnd => 8,
-            LcStateVal::Dev => 16,
-            LcStateVal::Rma => 24,
+            LcStateVal::ProdEnd => 1,
+            LcStateVal::Dev => 2,
+            LcStateVal::Rma => 3,
             LcStateVal::Test => return Ok(alert),
         };
 
         let class_enable = otp.read32("ROM_ALERT_CLASS_EN")?;
-        let class_escalate = otp.read32("ROM_ALERT_CLASS_ESCALATION")?;
+        let class_escalate = otp.read32("ROM_ALERT_ESCALATION")?;
 
         for i in 0..ALERT_HANDLER_ALERT_CLASS_SHADOWED_MULTIREG_COUNT as usize {
             let value = otp.read32_offset(Some("ROM_ALERT_CLASSIFICATION"), i * 4)?;
-            let cls = AlertClass::try_from(
-                value.view_bits::<Lsb0>()[lc_shift..lc_shift + 1].load_le::<u8>(),
-            )?;
-            let enable = AlertEnable::try_from(
-                class_enable.view_bits::<Lsb0>()[cls.index()..cls.index() + 1].load_le::<u8>(),
-            )?;
+            let cls = AlertClass::try_from(value.to_le_bytes()[lc_shift])?;
+            let enable = AlertEnable::try_from(class_enable.to_le_bytes()[cls.index()])?;
             alert.configure(i, cls, enable)?;
         }
 
         for i in 0..ALERT_HANDLER_LOC_ALERT_CLASS_SHADOWED_MULTIREG_COUNT as usize {
             let value = otp.read32_offset(Some("ROM_LOCAL_ALERT_CLASSIFICATION"), i * 4)?;
-            let cls = AlertClass::try_from(
-                value.view_bits::<Lsb0>()[lc_shift..lc_shift + 1].load_le::<u8>(),
-            )?;
-            let enable = AlertEnable::try_from(
-                class_enable.view_bits::<Lsb0>()[cls.index()..cls.index() + 1].load_le::<u8>(),
-            )?;
+            let cls = AlertClass::try_from(value.to_le_bytes()[lc_shift])?;
+            let enable = AlertEnable::try_from(class_enable.to_le_bytes()[cls.index()])?;
             alert.local_configure(i, cls, enable)?;
         }
 
         for i in 0..ALERT_HANDLER_PARAM_N_CLASSES as usize {
             let mut phase_cycs = [0; ALERT_HANDLER_PARAM_N_PHASES as usize];
             for phase in 0..ALERT_HANDLER_PARAM_N_PHASES as usize {
-                phase_cycs[phase] = otp
-                    .read32_offset(Some("ROM_ALERT_PHASE_CYCLES"), i * phase_cycs.len() + phase)?;
+                phase_cycs[phase] = otp.read32_offset(
+                    Some("ROM_ALERT_PHASE_CYCLES"),
+                    (i * phase_cycs.len() + phase) * 4,
+                )?;
             }
             let config = AlertClassConfig {
-                enabled: AlertEnable::try_from(
-                    class_enable.view_bits::<Lsb0>()[i..i + 1].load_le::<u8>(),
-                )?,
-                escalate: AlertEscalate::try_from(
-                    class_escalate.view_bits::<Lsb0>()[i..i + 1].load_le::<u8>(),
-                )?,
+                enabled: AlertEnable::try_from(class_enable.to_le_bytes()[i])?,
+                escalate: AlertEscalate::try_from(class_escalate.to_le_bytes()[i])?,
                 accum_thresh: otp.read32_offset(Some("ROM_ALERT_ACCUM_THRESH"), i * 4)?,
                 timeout_cyc: otp.read32_offset(Some("ROM_ALERT_TIMEOUT_CYCLES"), i * 4)?,
                 phase_cycs,
@@ -261,7 +259,18 @@
         };
 
         let mut reg = 0 as u32;
+
+        reg |= (0 & ALERT_HANDLER_CLASSA_CTRL_SHADOWED_MAP_E0_MASK)
+            << ALERT_HANDLER_CLASSA_CTRL_SHADOWED_MAP_E0_OFFSET;
+        reg |= (1 & ALERT_HANDLER_CLASSA_CTRL_SHADOWED_MAP_E1_MASK)
+            << ALERT_HANDLER_CLASSA_CTRL_SHADOWED_MAP_E1_OFFSET;
+        reg |= (2 & ALERT_HANDLER_CLASSA_CTRL_SHADOWED_MAP_E2_MASK)
+            << ALERT_HANDLER_CLASSA_CTRL_SHADOWED_MAP_E2_OFFSET;
+        reg |= (3 & ALERT_HANDLER_CLASSA_CTRL_SHADOWED_MAP_E3_MASK)
+            << ALERT_HANDLER_CLASSA_CTRL_SHADOWED_MAP_E3_OFFSET;
+
         let reg_bits = reg.view_bits_mut::<Lsb0>();
+
         match config.enabled {
             AlertEnable::None => {}
             AlertEnable::Enabled => {
@@ -295,7 +304,7 @@
             AlertEscalate::None => {}
         }
 
-        self.class[index] = reg;
+        self.class_regs[index].ctrl = reg;
         self.class_regs[index].accum_thresh = config.accum_thresh;
         self.class_regs[index].timeout_cyc = config.timeout_cyc;
         self.class_regs[index].phase_cycs = config.phase_cycs;
@@ -304,23 +313,23 @@
     }
 }
 
-trait CRC32Add {
+trait Crc32Add {
     fn crc32_add(self, diegst: &mut Digest<u32>);
 }
 
-impl CRC32Add for u32 {
+impl Crc32Add for u32 {
     fn crc32_add(self, digest: &mut Digest<u32>) {
         digest.update(self.to_le_bytes().as_slice())
     }
 }
 
-impl<T: CRC32Add, const N: usize> CRC32Add for [T; N] {
+impl<T: Crc32Add, const N: usize> Crc32Add for [T; N] {
     fn crc32_add(self, digest: &mut Digest<u32>) {
         self.map(|v| v.crc32_add(digest));
     }
 }
 
-impl CRC32Add for AlertClassRegs {
+impl Crc32Add for AlertClassRegs {
     fn crc32_add(self, digest: &mut Digest<u32>) {
         self.regwen.crc32_add(digest);
         self.ctrl.crc32_add(digest);
@@ -330,7 +339,7 @@
     }
 }
 
-impl CRC32Add for AlertRegs {
+impl Crc32Add for AlertRegs {
     fn crc32_add(self, digest: &mut Digest<u32>) {
         self.regwen.crc32_add(digest);
         self.en.crc32_add(digest);
@@ -431,15 +440,30 @@
 
     struct TestOtp {}
 
+    // OTP values that corrispond to the above `TEST_REG` values.
     impl OtpRead for TestOtp {
         fn read32_offset(&self, name: Option<&str>, offset: usize) -> Result<u32> {
-            let mut start_offset = 0;
-            if let Some(name) = name {}
-            Ok(0)
+            let name = name.unwrap();
+            Ok(match name {
+                "ROM_ALERT_CLASS_EN" => 0xa9a9a9a9,
+                "ROM_ALERT_ESCALATION" => 0xd1d1d1d1,
+                "ROM_ALERT_CLASSIFICATION" | "ROM_LOCAL_ALERT_CLASSIFICATION" => 0x94949494,
+                "ROM_ALERT_PHASE_CYCLES" => [
+                    0x00000000, 0x0000000a, 0x0000000a, 0xffffffff, // Class 0
+                    0x00000000, 0x0000000a, 0x0000000a, 0xffffffff, // Class 1
+                    0x00000000, 0x00000000, 0x00000000, 0x00000000, // Class 2
+                    0x00000000, 0x00000000, 0x00000000, 0x00000000, // Class 3
+                ][offset / 4],
+                "ROM_ALERT_ACCUM_THRESH" | "ROM_ALERT_TIMEOUT_CYCLES" => 0x00000000,
+                _ => panic!("No such OTP value {}", name),
+            })
         }
     }
 
     // A sanity test to make sure the correct CRC algorithm is being used.
+    //
+    // These values are taken from the CRC32 unit tests in
+    // `sw/device/silicon_creator/lib/crc32_unittest.cc`.
     #[test]
     fn test_new_crc() {
         let crc = new_crc();
@@ -462,4 +486,12 @@
     fn test_crc_from_regs() {
         assert_eq!(TEST_REGS.crc32(), 0xf9616122);
     }
+
+    #[test]
+    fn test_regs_from_otp() {
+        assert_eq!(
+            TEST_REGS,
+            AlertRegs::try_new(LcStateVal::Dev, &TestOtp {}).unwrap()
+        );
+    }
 }
diff --git a/sw/host/opentitanlib/src/otp/alert_handler_regs.rs b/sw/host/opentitanlib/src/otp/alert_handler_regs.rs
index f947327..4bf11df 100644
--- a/sw/host/opentitanlib/src/otp/alert_handler_regs.rs
+++ b/sw/host/opentitanlib/src/otp/alert_handler_regs.rs
@@ -1,3 +1,7 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
 /* automatically generated by rust-bindgen 0.60.1 */
 
 pub const ALERT_HANDLER_PARAM_N_ALERTS: u32 = 65;
diff --git a/sw/host/opentitanlib/src/otp/otp_img.rs b/sw/host/opentitanlib/src/otp/otp_img.rs
index 69d4963..14214a9 100644
--- a/sw/host/opentitanlib/src/otp/otp_img.rs
+++ b/sw/host/opentitanlib/src/otp/otp_img.rs
@@ -39,16 +39,6 @@
     fn read32_offset(&self, name: Option<&str>, offset: usize) -> Result<u32>;
 }
 
-impl OtpRead for OtpImg {
-    fn read32_offset(&self, name: Option<&str>, offset: usize) -> Result<u32> {
-        let mut start_offset = 0;
-        if let Some(name) = name {
-
-        }
-        Ok(0)
-    }
-}
-
 impl OtpImgPartition {
     pub fn get_item(&mut self, name: &str) -> Option<&mut OtpImgItem> {
         self.items
diff --git a/third_party/rust/crates/crates.bzl b/third_party/rust/crates/crates.bzl
index 996d8a9..6c4a529 100644
--- a/third_party/rust/crates/crates.bzl
+++ b/third_party/rust/crates/crates.bzl
@@ -212,347 +212,176 @@
         # Each of these may be used to temporarily override the location of
         # the crate to a path on your local filesystem for local development
         # of crates you may be using in your project.
-        CoreFoundation_sys__0_1_4=None,
-
-        IOKit_sys__0_1_5=None,
-
-        addr2line__0_17_0=None,
-
-        adler__1_0_2=None,
-
-        aho_corasick__0_7_19=None,
-
-        android_system_properties__0_1_5=None,
-
-        ansi_term__0_12_1=None,
-
-        anyhow__1_0_64=None,
-
-        atty__0_2_14=None,
-
-        autocfg__0_1_8=None,
-
-        autocfg__1_1_0=None,
-
-        backtrace__0_3_66=None,
-
-        base64ct__1_1_1=None,
-
-        bitflags__1_3_2=None,
-
-        bitvec__1_0_1=None,
-
-        block_buffer__0_10_3=None,
-
-        bumpalo__3_11_0=None,
-
-        byteorder__1_4_3=None,
-
-        cc__1_0_73=None,
-
-        cfg_if__0_1_10=None,
-
-        cfg_if__1_0_0=None,
-
-        chrono__0_4_22=None,
-
-        clap__2_34_0=None,
-
-        console__0_15_1=None,
-
-        const_oid__0_6_2=None,
-
-        core_foundation_sys__0_8_3=None,
-
-        cpufeatures__0_2_5=None,
-
-        crc__3_0_0=None,
-
-        crc_catalog__2_1_0=None,
-
-        crc32fast__1_3_2=None,
-
-        crypto_bigint__0_2_11=None,
-
-        crypto_common__0_1_6=None,
-
-        ctor__0_1_23=None,
-
-        der__0_4_5=None,
-
-        derive_more__0_14_1=None,
-
-        deser_hjson__1_0_2=None,
-
-        digest__0_10_3=None,
-
-        digest__0_9_0=None,
-
-        directories__4_0_1=None,
-
-        dirs_sys__0_3_7=None,
-
-        encode_unicode__0_3_6=None,
-
-        env_logger__0_8_4=None,
-
-        erased_serde__0_3_23=None,
-
-        fastrand__1_8_0=None,
-
-        flate2__1_0_24=None,
-
-        funty__2_0_0=None,
-
-        generic_array__0_14_6=None,
-
-        getrandom__0_2_7=None,
-
-        ghost__0_1_6=None,
-
-        gimli__0_26_2=None,
-
-        heck__0_3_3=None,
-
-        hermit_abi__0_1_19=None,
-
-        hex__0_4_3=None,
-
-        humantime__2_1_0=None,
-
-        iana_time_zone__0_1_47=None,
-
-        indicatif__0_16_2=None,
-
-        instant__0_1_12=None,
-
-        inventory__0_2_3=None,
-
-        itoa__1_0_3=None,
-
-        js_sys__0_3_60=None,
-
-        lazy_static__1_4_0=None,
-
-        libc__0_2_132=None,
-
-        libm__0_2_5=None,
-
-        libudev__0_3_0=None,
-
-        libudev_sys__0_1_4=None,
-
-        libusb1_sys__0_5_0=None,
-
-        log__0_4_17=None,
-
-        mach__0_1_2=None,
-
-        mach__0_3_2=None,
-
-        memchr__2_5_0=None,
-
-        memoffset__0_6_5=None,
-
-        miniz_oxide__0_5_4=None,
-
-        mio__0_7_14=None,
-
-        mio_signals__0_1_5=None,
-
-        miow__0_3_7=None,
-
-        nix__0_17_0=None,
-
-        nix__0_24_2=None,
-
-        ntapi__0_3_7=None,
-
-        num_bigint_dig__0_7_0=None,
-
-        num_integer__0_1_45=None,
-
-        num_iter__0_1_43=None,
-
-        num_traits__0_2_15=None,
-
-        num_enum__0_5_7=None,
-
-        num_enum_derive__0_5_7=None,
-
-        number_prefix__0_4_0=None,
-
-        object__0_25_3=None,
-
-        object__0_29_0=None,
-
-        once_cell__1_14_0=None,
-
-        pem_rfc7468__0_2_4=None,
-
-        pkcs1__0_2_4=None,
-
-        pkcs8__0_7_6=None,
-
-        pkg_config__0_3_25=None,
-
-        ppv_lite86__0_2_16=None,
-
-        proc_macro_crate__1_2_1=None,
-
-        proc_macro_error__1_0_4=None,
-
-        proc_macro_error_attr__1_0_4=None,
-
-        proc_macro2__0_4_30=None,
-
-        proc_macro2__1_0_43=None,
-
-        quote__0_6_13=None,
-
-        quote__1_0_21=None,
-
-        radium__0_7_0=None,
-
-        rand__0_8_5=None,
-
-        rand_chacha__0_3_1=None,
-
-        rand_core__0_6_3=None,
-
-        raw_tty__0_1_0=None,
-
-        redox_syscall__0_2_16=None,
-
-        redox_users__0_4_3=None,
-
-        regex__1_6_0=None,
-
-        regex_syntax__0_6_27=None,
-
-        remove_dir_all__0_5_3=None,
-
-        rsa__0_5_0=None,
-
-        rusb__0_8_1=None,
-
-        rustc_demangle__0_1_21=None,
-
-        rustc_version__0_2_3=None,
-
-        ryu__1_0_11=None,
-
-        semver__0_9_0=None,
-
-        semver_parser__0_7_0=None,
-
-        serde__1_0_144=None,
-
-        serde_derive__1_0_144=None,
-
-        serde_json__1_0_85=None,
-
-        serialport__4_2_0=None,
-
-        sha2__0_10_5=None,
-
-        shellwords__1_1_0=None,
-
-        smallvec__1_9_0=None,
-
-        spin__0_5_2=None,
-
-        spki__0_4_1=None,
-
-        strsim__0_8_0=None,
-
-        structopt__0_3_26=None,
-
-        structopt_derive__0_4_18=None,
-
-        subtle__2_4_1=None,
-
-        syn__0_15_44=None,
-
-        syn__1_0_99=None,
-
-        synstructure__0_12_6=None,
-
-        tap__1_0_1=None,
-
-        tempfile__3_3_0=None,
-
-        termcolor__1_1_3=None,
-
-        terminal_size__0_1_17=None,
-
-        textwrap__0_11_0=None,
-
-        thiserror__1_0_34=None,
-
-        thiserror_impl__1_0_34=None,
-
-        time__0_1_44=None,
-
-        toml__0_5_9=None,
-
-        typenum__1_15_0=None,
-
-        typetag__0_1_8=None,
-
-        typetag_impl__0_1_8=None,
-
-        unicode_ident__1_0_3=None,
-
-        unicode_segmentation__1_9_0=None,
-
-        unicode_width__0_1_9=None,
-
-        unicode_xid__0_1_0=None,
-
-        unicode_xid__0_2_3=None,
-
-        vcpkg__0_2_15=None,
-
-        vec_map__0_8_2=None,
-
-        version_check__0_9_4=None,
-
-        void__1_0_2=None,
-
-        wasi__0_10_0_wasi_snapshot_preview1=None,
-
-        wasi__0_11_0_wasi_snapshot_preview1=None,
-
-        wasm_bindgen__0_2_83=None,
-
-        wasm_bindgen_backend__0_2_83=None,
-
-        wasm_bindgen_macro__0_2_83=None,
-
-        wasm_bindgen_macro_support__0_2_83=None,
-
-        wasm_bindgen_shared__0_2_83=None,
-
-        winapi__0_3_9=None,
-
-        winapi_i686_pc_windows_gnu__0_4_0=None,
-
-        winapi_util__0_1_5=None,
-
-        winapi_x86_64_pc_windows_gnu__0_4_0=None,
-
-        wyz__0_5_0=None,
-
-        zerocopy__0_5_0=None,
-
-        zerocopy_derive__0_3_1=None,
-
-        zeroize__1_4_3=None,
-
-        zeroize_derive__1_3_2=None,
-
-    ):
+        CoreFoundation_sys__0_1_4 = None,
+        IOKit_sys__0_1_5 = None,
+        addr2line__0_17_0 = None,
+        adler__1_0_2 = None,
+        aho_corasick__0_7_19 = None,
+        android_system_properties__0_1_5 = None,
+        ansi_term__0_12_1 = None,
+        anyhow__1_0_64 = None,
+        atty__0_2_14 = None,
+        autocfg__0_1_8 = None,
+        autocfg__1_1_0 = None,
+        backtrace__0_3_66 = None,
+        base64ct__1_1_1 = None,
+        bitflags__1_3_2 = None,
+        bitvec__1_0_1 = None,
+        block_buffer__0_10_3 = None,
+        bumpalo__3_11_0 = None,
+        byteorder__1_4_3 = None,
+        cc__1_0_73 = None,
+        cfg_if__0_1_10 = None,
+        cfg_if__1_0_0 = None,
+        chrono__0_4_22 = None,
+        clap__2_34_0 = None,
+        console__0_15_1 = None,
+        const_oid__0_6_2 = None,
+        core_foundation_sys__0_8_3 = None,
+        cpufeatures__0_2_5 = None,
+        crc__3_0_0 = None,
+        crc_catalog__2_1_0 = None,
+        crc32fast__1_3_2 = None,
+        crypto_bigint__0_2_11 = None,
+        crypto_common__0_1_6 = None,
+        ctor__0_1_23 = None,
+        der__0_4_5 = None,
+        derive_more__0_14_1 = None,
+        deser_hjson__1_0_2 = None,
+        digest__0_10_3 = None,
+        digest__0_9_0 = None,
+        directories__4_0_1 = None,
+        dirs_sys__0_3_7 = None,
+        encode_unicode__0_3_6 = None,
+        env_logger__0_8_4 = None,
+        erased_serde__0_3_23 = None,
+        fastrand__1_8_0 = None,
+        flate2__1_0_24 = None,
+        funty__2_0_0 = None,
+        generic_array__0_14_6 = None,
+        getrandom__0_2_7 = None,
+        ghost__0_1_6 = None,
+        gimli__0_26_2 = None,
+        heck__0_3_3 = None,
+        hermit_abi__0_1_19 = None,
+        hex__0_4_3 = None,
+        humantime__2_1_0 = None,
+        iana_time_zone__0_1_47 = None,
+        indicatif__0_16_2 = None,
+        instant__0_1_12 = None,
+        inventory__0_2_3 = None,
+        itoa__1_0_3 = None,
+        js_sys__0_3_60 = None,
+        lazy_static__1_4_0 = None,
+        libc__0_2_132 = None,
+        libm__0_2_5 = None,
+        libudev__0_3_0 = None,
+        libudev_sys__0_1_4 = None,
+        libusb1_sys__0_5_0 = None,
+        log__0_4_17 = None,
+        mach__0_1_2 = None,
+        mach__0_3_2 = None,
+        memchr__2_5_0 = None,
+        memoffset__0_6_5 = None,
+        miniz_oxide__0_5_4 = None,
+        mio__0_7_14 = None,
+        mio_signals__0_1_5 = None,
+        miow__0_3_7 = None,
+        nix__0_17_0 = None,
+        nix__0_24_2 = None,
+        ntapi__0_3_7 = None,
+        num_bigint_dig__0_7_0 = None,
+        num_integer__0_1_45 = None,
+        num_iter__0_1_43 = None,
+        num_traits__0_2_15 = None,
+        num_enum__0_5_7 = None,
+        num_enum_derive__0_5_7 = None,
+        number_prefix__0_4_0 = None,
+        object__0_25_3 = None,
+        object__0_29_0 = None,
+        once_cell__1_14_0 = None,
+        pem_rfc7468__0_2_4 = None,
+        pkcs1__0_2_4 = None,
+        pkcs8__0_7_6 = None,
+        pkg_config__0_3_25 = None,
+        ppv_lite86__0_2_16 = None,
+        proc_macro_crate__1_2_1 = None,
+        proc_macro_error__1_0_4 = None,
+        proc_macro_error_attr__1_0_4 = None,
+        proc_macro2__0_4_30 = None,
+        proc_macro2__1_0_43 = None,
+        quote__0_6_13 = None,
+        quote__1_0_21 = None,
+        radium__0_7_0 = None,
+        rand__0_8_5 = None,
+        rand_chacha__0_3_1 = None,
+        rand_core__0_6_3 = None,
+        raw_tty__0_1_0 = None,
+        redox_syscall__0_2_16 = None,
+        redox_users__0_4_3 = None,
+        regex__1_6_0 = None,
+        regex_syntax__0_6_27 = None,
+        remove_dir_all__0_5_3 = None,
+        rsa__0_5_0 = None,
+        rusb__0_8_1 = None,
+        rustc_demangle__0_1_21 = None,
+        rustc_version__0_2_3 = None,
+        ryu__1_0_11 = None,
+        semver__0_9_0 = None,
+        semver_parser__0_7_0 = None,
+        serde__1_0_144 = None,
+        serde_derive__1_0_144 = None,
+        serde_json__1_0_85 = None,
+        serialport__4_2_0 = None,
+        sha2__0_10_5 = None,
+        shellwords__1_1_0 = None,
+        smallvec__1_9_0 = None,
+        spin__0_5_2 = None,
+        spki__0_4_1 = None,
+        strsim__0_8_0 = None,
+        structopt__0_3_26 = None,
+        structopt_derive__0_4_18 = None,
+        subtle__2_4_1 = None,
+        syn__0_15_44 = None,
+        syn__1_0_99 = None,
+        synstructure__0_12_6 = None,
+        tap__1_0_1 = None,
+        tempfile__3_3_0 = None,
+        termcolor__1_1_3 = None,
+        terminal_size__0_1_17 = None,
+        textwrap__0_11_0 = None,
+        thiserror__1_0_34 = None,
+        thiserror_impl__1_0_34 = None,
+        time__0_1_44 = None,
+        toml__0_5_9 = None,
+        typenum__1_15_0 = None,
+        typetag__0_1_8 = None,
+        typetag_impl__0_1_8 = None,
+        unicode_ident__1_0_3 = None,
+        unicode_segmentation__1_9_0 = None,
+        unicode_width__0_1_9 = None,
+        unicode_xid__0_1_0 = None,
+        unicode_xid__0_2_3 = None,
+        vcpkg__0_2_15 = None,
+        vec_map__0_8_2 = None,
+        version_check__0_9_4 = None,
+        void__1_0_2 = None,
+        wasi__0_10_0_wasi_snapshot_preview1 = None,
+        wasi__0_11_0_wasi_snapshot_preview1 = None,
+        wasm_bindgen__0_2_83 = None,
+        wasm_bindgen_backend__0_2_83 = None,
+        wasm_bindgen_macro__0_2_83 = None,
+        wasm_bindgen_macro_support__0_2_83 = None,
+        wasm_bindgen_shared__0_2_83 = None,
+        winapi__0_3_9 = None,
+        winapi_i686_pc_windows_gnu__0_4_0 = None,
+        winapi_util__0_1_5 = None,
+        winapi_x86_64_pc_windows_gnu__0_4_0 = None,
+        wyz__0_5_0 = None,
+        zerocopy__0_5_0 = None,
+        zerocopy_derive__0_3_1 = None,
+        zeroize__1_4_3 = None,
+        zeroize_derive__1_3_2 = None):
     """This function defines a collection of repos and should be called in a WORKSPACE file"""
     if CoreFoundation_sys__0_1_4:
         maybe(
@@ -1717,12 +1546,12 @@
             type = "tar.gz",
             sha256 = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324",
             strip_prefix = "libudev-sys-0.1.4",
-        patches = [
-            "@//third_party/rust/crates/patches:libudev-sys-0.1.4.patch",
-        ],
-        patch_args = [
-            "-p1",
-        ],
+            patches = [
+                "@//third_party/rust/crates/patches:libudev-sys-0.1.4.patch",
+            ],
+            patch_args = [
+                "-p1",
+            ],
             build_file = Label("//third_party/rust/crates/remote:BUILD.libudev-sys-0.1.4.bazel"),
         )
 
@@ -3612,4 +3441,3 @@
             strip_prefix = "zeroize_derive-1.3.2",
             build_file = Label("//third_party/rust/crates/remote:BUILD.zeroize_derive-1.3.2.bazel"),
         )
-