From bdaced76037cb8d02139948a2b3a39da89959b8f Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Sat, 27 May 2017 12:22:50 +0100 Subject: [PATCH] caps, ecaps2: Add a function to create a Disco query from a hash. --- src/caps.rs | 12 +++++++++++- src/ecaps2.rs | 11 ++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/caps.rs b/src/caps.rs index d17cb501..4b504241 100644 --- a/src/caps.rs +++ b/src/caps.rs @@ -91,7 +91,8 @@ fn compute_features(features: &[Feature]) -> Vec { fn compute_identities(identities: &[Identity]) -> Vec { compute_items(identities, |identity| { - let string = format!("{}/{}/{}/{}", identity.category, identity.type_, identity.xml_lang, match identity.name { Some(ref name) => name.clone(), None => String::new() }); + let empty = String::new(); + let string = format!("{}/{}/{}/{}", identity.category, identity.type_, identity.xml_lang, match identity.name { Some(ref name) => name, None => &empty }); let bytes = string.as_bytes(); let mut vec = Vec::with_capacity(bytes.len()); vec.extend_from_slice(bytes); @@ -191,6 +192,15 @@ pub fn hash_caps(data: &[u8], algo: Algo) -> Result { }) } +pub fn query_caps(caps: Caps) -> Disco { + Disco { + node: Some(format!("{}#{}", caps.node, base64::encode(&caps.hash.hash))), + identities: vec!(), + features: vec!(), + extensions: vec!(), + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/ecaps2.rs b/src/ecaps2.rs index 03f8a40b..09f1516e 100644 --- a/src/ecaps2.rs +++ b/src/ecaps2.rs @@ -13,6 +13,7 @@ use hashes::{Hash, Algo}; use minidom::Element; use error::Error; use ns; +use base64; use sha2::{Sha256, Sha512}; use sha3::{Sha3_256, Sha3_512}; @@ -171,11 +172,19 @@ pub fn hash_ecaps2(data: &[u8], algo: Algo) -> Result { }) } +pub fn query_ecaps2(hash: Hash) -> Disco { + Disco { + node: Some(format!("{}#{}.{}", ns::ECAPS2, String::from(hash.algo), base64::encode(&hash.hash))), + identities: vec!(), + features: vec!(), + extensions: vec!(), + } +} + #[cfg(test)] mod tests { use super::*; use ecaps2; - use base64; #[test] fn test_parse() {