//! `cargo xtask` automation. //! //! Please refer to for an explanation of the concept. use std::process::Command; pub fn install_targets(targets: &mut dyn Iterator, toolchain: Option<&str>) { let mut rustup = Command::new("rustup"); rustup.arg("target").arg("add").args(targets); if let Some(toolchain) = toolchain { rustup.arg("--toolchain").arg(toolchain); } let status = rustup.status().unwrap(); assert!(status.success(), "rustup command failed: {:?}", rustup); } // Check that serde and PartialOrd works with VectActive pub fn check_host_side() { use cortex_m::peripheral::{itm::LocalTimestampOptions, scb::VectActive}; // check serde { let v = VectActive::from(22).unwrap(); let json = serde_json::to_string(&v).expect("Failed to serialize VectActive"); let deser_v: VectActive = serde_json::from_str(&json).expect("Failed to deserialize VectActive"); assert_eq!(deser_v, v); let lts = LocalTimestampOptions::EnabledDiv4; let json = serde_json::to_string(<s).expect("Failed to serialize LocalTimestampOptions"); let deser_lts: LocalTimestampOptions = serde_json::from_str(&json).expect("Failed to deserilaize LocalTimestampOptions"); assert_eq!(deser_lts, lts); } // check PartialOrd { let a = VectActive::from(19).unwrap(); let b = VectActive::from(20).unwrap(); assert!(a < b); } // check TryFrom { use core::convert::TryInto; use std::convert::TryFrom; let lts: LocalTimestampOptions = (16_u8).try_into().unwrap(); assert_eq!(lts, LocalTimestampOptions::EnabledDiv16); assert!(LocalTimestampOptions::try_from(42).is_err()); } }