#![allow(unused_assignments)]
use cbor::CborTagEncode;
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
use types;
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug)]
pub struct GetGroupKeyResponse {
pub target_id : types::GroupAddress,
pub public_sign_keys : Vec<(types::DhtId, types::PublicSignKey)>
}
impl GetGroupKeyResponse {
pub fn generate_random() -> GetGroupKeyResponse {
let mut vec: Vec<(types::DhtId, types::PublicSignKey)> = Vec::with_capacity(30);
for i in 0..30 {
vec.push((types::DhtId::generate_random(), types::PublicSignKey::generate_random()));
}
GetGroupKeyResponse {
target_id: types::DhtId::generate_random(),
public_sign_keys: vec,
}
}
}
impl Encodable for GetGroupKeyResponse {
fn encode<E: Encoder>(&self, e: &mut E)->Result<(), E::Error> {
CborTagEncode::new(5483_001, &(&self.target_id, &self.public_sign_keys)).encode(e)
}
}
impl Decodable for GetGroupKeyResponse {
fn decode<D: Decoder>(d: &mut D)->Result<GetGroupKeyResponse, D::Error> {
try!(d.read_u64());
let (target_id, public_sign_keys) = try!(Decodable::decode(d));
Ok(GetGroupKeyResponse { target_id: target_id , public_sign_keys: public_sign_keys})
}
}
#[cfg(test)]
mod test {
use super::*;
use cbor;
#[test]
fn get_group_key_response_serialisation() {
let obj_before = GetGroupKeyResponse::generate_random();
let mut e = cbor::Encoder::from_memory();
e.encode(&[&obj_before]).unwrap();
let mut d = cbor::Decoder::from_bytes(e.as_bytes());
let obj_after: GetGroupKeyResponse = d.decode().next().unwrap().unwrap();
assert_eq!(obj_before, obj_after);
}
}