diff options
author | 2021-11-25 00:55:07 +0000 | |
---|---|---|
committer | 2021-11-25 00:55:07 +0000 | |
commit | a78c497b7d1eb68335eb664e7dfbaf8a8fd879dd (patch) | |
tree | f8f3c093ada6b19ddca60c009b9a3ac80cea6100 /xtask/src | |
parent | 6b013138b734b9bbeb24a345f75d2bcc1c69fa8d (diff) | |
parent | 74e9bbe6811deb4888bf0c20157506ab06e4f957 (diff) | |
download | cortex-m-a78c497b7d1eb68335eb664e7dfbaf8a8fd879dd.tar.gz cortex-m-a78c497b7d1eb68335eb664e7dfbaf8a8fd879dd.tar.zst cortex-m-a78c497b7d1eb68335eb664e7dfbaf8a8fd879dd.zip |
Merge #363
363: scb: derive serde, Hash, PartialOrd for VectActive behind gates r=thalesfragoso a=tmplt
Exposes two new feature gates for VectActive serde::{Serialize,
Deserialize} (via "serde") and Hash, PartialOrd (via "std-map") for use
on host-side ITM tracing programs. While the struct itself is not
received directly over ITM, its use greatly simplifies the
implementation by allowing VectActive as keys in map collections and
file/socket {,de}serialization to forward the structure elsewhere. These
features are not enabled by default.
Before this patch, serde functionality could be realized via [0], but
this does not propagate down a dependency chain (i.e. if realized for
crate B, which crate A depends on, serde functionality is not exposed in
crate A unless VectActive is wrapped in a type from crate B). I am not
aware of any method to realize PartialOrd, Hash derivation for a
downstream crate.
[0] https://serde.rs/remote-derive.html
Co-authored-by: Viktor Sonesten <v@tmplt.dev>
Diffstat (limited to 'xtask/src')
-rw-r--r-- | xtask/src/lib.rs | 21 | ||||
-rw-r--r-- | xtask/src/main.rs | 8 |
2 files changed, 26 insertions, 3 deletions
diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs index a7b85e7..c3d8356 100644 --- a/xtask/src/lib.rs +++ b/xtask/src/lib.rs @@ -208,3 +208,24 @@ pub fn check_blobs() { println!("Blobs identical."); } + +// Check that serde and PartialOrd works with VectActive +pub fn check_host_side() { + use cortex_m::peripheral::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); + } + + // check PartialOrd + { + let a = VectActive::from(19).unwrap(); + let b = VectActive::from(20).unwrap(); + assert_eq!(a < b, true); + } +} diff --git a/xtask/src/main.rs b/xtask/src/main.rs index ec55bf8..3e4b394 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -1,17 +1,19 @@ use std::{env, process}; -use xtask::{assemble_blobs, check_blobs}; +use xtask::{assemble_blobs, check_blobs, check_host_side}; fn main() { let subcommand = env::args().skip(1).next(); match subcommand.as_ref().map(|s| &**s) { Some("assemble") => assemble_blobs(), Some("check-blobs") => check_blobs(), + Some("check-host-side") => check_host_side(), _ => { eprintln!("usage: cargo xtask <subcommand>"); eprintln!(); eprintln!("subcommands:"); - eprintln!(" assemble Reassemble the pre-built artifacts"); - eprintln!(" check-blobs Check that the pre-built artifacts are up-to-date and reproducible"); + eprintln!(" assemble Reassemble the pre-built artifacts"); + eprintln!(" check-blobs Check that the pre-built artifacts are up-to-date and reproducible"); + eprintln!(" check-host-side Build the crate in a non-Cortex-M host application and check host side usage of certain types"); process::exit(1); } } |