Convert some `vec_type` TLVs to `required_vec`
[rust-lightning] / lightning / src / util / ser.rs
index 7e69f72b0eadace9f2896b59f57de7747ce4b74d..0e510760e62a3725055cecf3394a17b5b879af9a 100644 (file)
@@ -44,6 +44,7 @@ use crate::ln::msgs::PartialSignatureWithNonce;
 use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
 
 use crate::util::byte_utils::{be48_to_array, slice_to_be48};
+use crate::util::string::UntrustedString;
 
 /// serialization buffer size
 pub const MAX_BUF_SIZE: usize = 64 * 1024;
@@ -630,6 +631,21 @@ impl<'a> From<&'a String> for WithoutLength<&'a String> {
        fn from(s: &'a String) -> Self { Self(s) }
 }
 
+
+impl Writeable for WithoutLength<&UntrustedString> {
+       #[inline]
+       fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
+               WithoutLength(&self.0.0).write(w)
+       }
+}
+impl Readable for WithoutLength<UntrustedString> {
+       #[inline]
+       fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
+               let s: WithoutLength<String> = Readable::read(r)?;
+               Ok(Self(UntrustedString(s.0)))
+       }
+}
+
 impl<'a, T: Writeable> Writeable for WithoutLength<&'a Vec<T>> {
        #[inline]
        fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
@@ -832,6 +848,7 @@ impl Readable for Vec<u8> {
 }
 
 impl_for_vec!(ecdsa::Signature);
+impl_for_vec!(crate::chain::channelmonitor::ChannelMonitorUpdate);
 impl_for_vec!(crate::ln::channelmanager::MonitorUpdateCompletionAction);
 impl_for_vec!((A, B), A, B);
 impl_writeable_for_vec!(&crate::routing::router::BlindedTail);