1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
use xdr_codec::{Pack, Write, Result, pack_string, pack_opaque_array}; use ::xdr::ToXdr; use ::memo::Memo; fn memo_tag(m: &Memo) -> i32 { match *m { Memo::None => 0, Memo::Text(_) => 1, Memo::Id(_) => 2, Memo::Hash(_) => 3, Memo::Return(_) => 4, } } impl<W: Write> Pack<W> for Memo { fn pack(&self, out: &mut W) -> Result<usize> { let tag = memo_tag(self); match *self { Memo::None => tag.pack(out), Memo::Text(ref text) => Ok(tag.pack(out)? + pack_string(&text, None, out)?), Memo::Id(ref id) => Ok(tag.pack(out)? + id.pack(out)?), Memo::Hash(ref hash) => Ok(tag.pack(out)? + pack_opaque_array(hash, 32, out)?), Memo::Return(ref hash) => Ok(tag.pack(out)? + pack_opaque_array(hash, 32, out)?), } } } impl ToXdr for Memo { fn to_writer<W: Write>(&self, mut buf: W) -> ::error::Result<usize> { let r = self.pack(&mut buf)?; Ok(r) } } #[cfg(test)] mod tests { use ::xdr::ToXdr; use Memo; #[test] fn test_none() { let m = Memo::None; let s = m.to_base64().unwrap(); assert_eq!(s, "AAAAAA=="); } #[test] fn test_text() { let m = Memo::Text("test post please ignore".to_string()); let s = m.to_base64().unwrap(); assert_eq!(s, "AAAAAQAAABd0ZXN0IHBvc3QgcGxlYXNlIGlnbm9yZQA="); } #[test] fn test_id() { let m = Memo::Id(1234); let s = m.to_base64().unwrap(); assert_eq!(s, "AAAAAgAAAAAAAATS"); } #[test] fn test_hash() { let m = Memo::Hash([0x2f, 0x1, 0x2, 0x3, 0x4, 0x5, 0x7, 0xAD, 0x2f, 0x1, 0x2, 0x3, 0x4, 0x5, 0x7, 0xAD, 0x2f, 0x1, 0x2, 0x3, 0x4, 0x5, 0x7, 0xAD, 0x2f, 0x1, 0x2, 0x3, 0x4, 0x5, 0x7, 0xAD]); let s = m.to_base64().unwrap(); assert_eq!(s, "AAAAAy8BAgMEBQetLwECAwQFB60vAQIDBAUHrS8BAgMEBQet"); } #[test] fn test_return() { let m = Memo::Return([0x2f, 0x1, 0x2, 0x3, 0x4, 0x5, 0x7, 0xAD, 0x2f, 0x1, 0x2, 0x3, 0x4, 0x5, 0x7, 0xAD, 0x2f, 0x1, 0x2, 0x3, 0x4, 0x5, 0x7, 0xAD, 0x2f, 0x1, 0x2, 0x3, 0x4, 0x5, 0x7, 0xAD]); let s = m.to_base64().unwrap(); assert_eq!(s, "AAAABC8BAgMEBQetLwECAwQFB60vAQIDBAUHrS8BAgMEBQet"); } }