parity-zcash/message/src/message/message.rs

53 lines
1.5 KiB
Rust
Raw Normal View History

use crypto::checksum;
2016-09-21 00:41:58 -07:00
use ser::{Serializable, Stream, serialize};
2016-09-28 14:58:23 -07:00
use common::Magic;
2016-10-03 07:29:07 -07:00
use message::{MessageHeader, Payload};
#[derive(Debug, PartialEq)]
pub struct Message {
pub header: MessageHeader,
pub payload: Payload,
}
impl Message {
2016-09-28 14:58:23 -07:00
pub fn new(magic: Magic, payload: Payload) -> Message {
let serialized = serialize(&payload);
Message {
header: MessageHeader {
magic: magic,
command: payload.command(),
len: serialized.len() as u32,
checksum: checksum(&serialized),
},
payload: payload,
}
}
}
impl Serializable for Message {
fn serialize(&self, stream: &mut Stream) {
stream
.append(&self.header)
.append(&self.payload);
}
}
#[cfg(test)]
mod tests {
use bytes::Bytes;
2016-09-28 14:58:23 -07:00
use ser::serialize;
use common::Magic;
2016-10-03 07:29:07 -07:00
use types::Version;
use super::Message;
2016-10-03 07:29:07 -07:00
use Payload;
#[test]
fn test_message_serialization() {
let expected: Bytes = "f9beb4d976657273696f6e000000000064000000358d493262ea0000010000000000000011b2d05000000000010000000000000000000000000000000000ffff000000000000000000000000000000000000000000000000ffff0000000000003b2eb35d8ce617650f2f5361746f7368693a302e372e322fc03e0300".into();
let version: Version = "62ea0000010000000000000011b2d05000000000010000000000000000000000000000000000ffff000000000000000000000000000000000000000000000000ffff0000000000003b2eb35d8ce617650f2f5361746f7368693a302e372e322fc03e0300".into();
2016-09-28 14:58:23 -07:00
let magic = Magic::Mainnet;
let message = Message::new(magic, Payload::Version(version));
assert_eq!(serialize(&message), expected);
}
}