use byteorder::ReadBytesExt;
use semver::{Version, Identifier};
use std::io::BufRead;
use super::{Result, Unpack, read_cstring};
#[derive(Clone, Debug, PartialEq)]
pub struct Sender {
pub name: String,
pub version: Version,
pub natnet_version: Version,
}
fn unpack_version<B: BufRead>(bytes: &mut B) -> Result<Version> {
let v1 = try!(bytes.read_u8()) as u64;
let v2 = try!(bytes.read_u8()) as u64;
let v3 = try!(bytes.read_u8()) as u64;
let v4 = try!(bytes.read_u8()) as u64;
Ok(Version {
major: v1,
minor: v2,
patch: v3,
pre: vec![],
build: vec![Identifier::Numeric(v4)],
})
}
impl Unpack<Sender> for Sender {
fn unpack<B: BufRead>(_: &Version, bytes: &mut B) -> Result<Sender> {
debug!("Unpacking application identifier");
let name = try!(read_cstring(bytes));
bytes.consume(256 - name.as_bytes().len() - 1);
let ver = try!(unpack_version(bytes));
let nat = try!(unpack_version(bytes));
trace!("Found application name {:?}, version {} using NatNet version {}",
name,
ver,
nat);
Ok(Sender {
name: name,
version: ver,
natnet_version: nat,
})
}
}