mwc_bch/messages/
tx_out.rs1use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
2use script::Script;
3use std::io;
4use std::io::{Read, Write};
5use util::{var_int, Amount, Result, Serializable};
6
7#[derive(Debug, PartialEq, Eq, Hash, Clone)]
9pub struct TxOut {
10 pub amount: Amount,
12 pub pk_script: Script,
14}
15
16impl TxOut {
17 pub fn size(&self) -> usize {
19 8 + var_int::size(self.pk_script.0.len() as u64) + self.pk_script.0.len()
20 }
21}
22
23impl Serializable<TxOut> for TxOut {
24 fn read(reader: &mut dyn Read) -> Result<TxOut> {
25 let amount = Amount(reader.read_i64::<LittleEndian>()?);
26 let script_len = var_int::read(reader)?;
27 let mut pk_script = Script(vec![0; script_len as usize]);
28 reader.read(&mut pk_script.0)?;
29 Ok(TxOut { amount, pk_script })
30 }
31
32 fn write(&self, writer: &mut dyn Write) -> io::Result<()> {
33 writer.write_i64::<LittleEndian>(self.amount.0)?;
34 var_int::write(self.pk_script.0.len() as u64, writer)?;
35 writer.write(&self.pk_script.0)?;
36 Ok(())
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43 use std::io::Cursor;
44
45 #[test]
46 fn write_read() {
47 let mut v = Vec::new();
48 let t = TxOut {
49 amount: Amount(4400044000),
50 pk_script: Script(vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 100, 99, 98, 97, 96]),
51 };
52 t.write(&mut v).unwrap();
53 assert!(v.len() == t.size());
54 assert!(TxOut::read(&mut Cursor::new(&v)).unwrap() == t);
55 }
56}