diff --git a/zebra-chain/src/serialization/write_zcash.rs b/zebra-chain/src/serialization/write_zcash.rs index ea6c71587..ad53aeedc 100644 --- a/zebra-chain/src/serialization/write_zcash.rs +++ b/zebra-chain/src/serialization/write_zcash.rs @@ -71,13 +71,6 @@ pub trait WriteZcashExt: io::Write { self.write_u16::(addr.port()) } - /// Write a string in Bitcoin format. - #[inline] - fn write_string(&mut self, string: &str) -> io::Result<()> { - self.write_compactsize(string.len() as u64)?; - self.write_all(string.as_bytes()) - } - /// Convenience method to write exactly 32 u8's. #[inline] fn write_32_bytes(&mut self, bytes: &[u8; 32]) -> io::Result<()> { diff --git a/zebra-chain/src/serialization/zcash_serialize.rs b/zebra-chain/src/serialization/zcash_serialize.rs index 02ac0da76..5c5b06969 100644 --- a/zebra-chain/src/serialization/zcash_serialize.rs +++ b/zebra-chain/src/serialization/zcash_serialize.rs @@ -99,6 +99,22 @@ pub fn zcash_serialize_bytes_external_count( writer.write_all(&vec) } +/// Write a Bitcoin-encoded UTF-8 `&str`. +impl ZcashSerialize for &str { + fn zcash_serialize(&self, mut writer: W) -> Result<(), io::Error> { + let str_bytes = self.as_bytes(); + writer.write_compactsize(str_bytes.len() as u64)?; + writer.write_all(str_bytes) + } +} + +/// Write a Bitcoin-encoded UTF-8 `String`. +impl ZcashSerialize for String { + fn zcash_serialize(&self, mut writer: W) -> Result<(), io::Error> { + self.as_str().zcash_serialize(&mut writer) + } +} + /// The maximum length of a Zcash message, in bytes. /// /// This value is used to calculate safe preallocation limits for some types diff --git a/zebra-network/src/protocol/external/codec.rs b/zebra-network/src/protocol/external/codec.rs index 1602c54f5..e64f5c9e4 100644 --- a/zebra-network/src/protocol/external/codec.rs +++ b/zebra-network/src/protocol/external/codec.rs @@ -228,7 +228,7 @@ impl Codec { writer.write_socket_addr(*from_addr)?; writer.write_u64::(nonce.0)?; - writer.write_string(&user_agent)?; + user_agent.zcash_serialize(&mut writer)?; writer.write_u32::(start_height.0)?; writer.write_u8(*relay as u8)?; } @@ -245,9 +245,9 @@ impl Codec { reason, data, } => { - writer.write_string(&message)?; + message.zcash_serialize(&mut writer)?; writer.write_u8(*ccode as u8)?; - writer.write_string(&reason)?; + reason.zcash_serialize(&mut writer)?; if let Some(data) = data { writer.write_all(data)?; }