From 199ce1fdba969783327c9eb1d655d1b26ee0c8c7 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 17 Sep 2019 09:57:44 +0100 Subject: [PATCH] invert_map (for placeholder en/decode conversion) --- implementations/rust/src/lib.rs | 16 +++++++--------- implementations/rust/src/value/mod.rs | 7 +++++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/implementations/rust/src/lib.rs b/implementations/rust/src/lib.rs index f0149b3..0165c58 100644 --- a/implementations/rust/src/lib.rs +++ b/implementations/rust/src/lib.rs @@ -212,6 +212,7 @@ mod samples_tests { use crate::value::DecodePlaceholderMap; use crate::value::to_value; use crate::value::from_value; + use crate::value::invert_map; use std::collections::BTreeMap; #[derive(Debug, serde::Serialize, serde::Deserialize)] @@ -236,16 +237,13 @@ mod samples_tests { #[test] fn run() { let mut d = Decoder::new(std::fs::File::open("../../tests/samples.bin").unwrap(), None); - let v = d.next().unwrap(); - // println!("{:#?}", v); + let tests: TestCases = from_value(&d.next().unwrap()).unwrap(); + let decode_placeholders = tests.decode_placeholders.0; + let encode_placeholders = invert_map(&decode_placeholders); - let tests: TestCases = from_value(&v).unwrap(); - println!("{:#?}", tests); - - // let mut buf = Vec::new(); - // let mut e = Encoder::new(&mut buf, None); - // e.write(&v).unwrap(); - // println!("{:?}", Value::from(buf)) + // println!("{:#?}", tests); + println!("{:#?}", decode_placeholders); + println!("{:#?}", encode_placeholders); } #[test] fn simple_to_value() { diff --git a/implementations/rust/src/value/mod.rs b/implementations/rust/src/value/mod.rs index ad8eb7b..f74c613 100644 --- a/implementations/rust/src/value/mod.rs +++ b/implementations/rust/src/value/mod.rs @@ -18,3 +18,10 @@ pub use value::AValue; pub use value::Dictionary; pub use value::Set; pub use value::Value; + +pub fn invert_map(m: &std::collections::BTreeMap) -> std::collections::BTreeMap + where A: Clone, B: Clone + Ord +{ + use std::iter::FromIterator; + std::collections::BTreeMap::from_iter(m.iter().map(|(a, b)| (b.clone(), a.clone()))) +}