Add a second Readable trait for state args, clean macros slightly
[rust-lightning] / src / util / ser.rs
index 8c713dfeebef297f6751d756e2966e83fa75b37f..5429c0e664eb655cb588383cda1a8d5b90937491 100644 (file)
@@ -82,6 +82,16 @@ pub trait Readable<R>
        fn read(reader: &mut R) -> Result<Self, DecodeError>;
 }
 
+/// A trait that various higher-level rust-lightning types implement allowing them to be read in
+/// from a Read given some additional set of arguments which is required to deserialize.
+pub trait ReadableArgs<R, P>
+       where Self: Sized,
+             R: Read
+{
+       /// Reads a Self in from the given Read
+       fn read(reader: &mut R, params: P) -> Result<Self, DecodeError>;
+}
+
 macro_rules! impl_writeable_primitive {
        ($val_type:ty, $meth_write:ident, $len: expr, $meth_read:ident) => {
                impl Writeable for $val_type {
@@ -295,7 +305,7 @@ impl<R: Read> Readable<R> for PublicKey {
                let buf: [u8; 33] = Readable::read(r)?;
                match PublicKey::from_slice(&Secp256k1::without_caps(), &buf) {
                        Ok(key) => Ok(key),
-                       Err(_) => return Err(DecodeError::BadPublicKey),
+                       Err(_) => return Err(DecodeError::InvalidValue),
                }
        }
 }
@@ -324,7 +334,7 @@ impl<R: Read> Readable<R> for Signature {
                let buf: [u8; 64] = Readable::read(r)?;
                match Signature::from_compact(&Secp256k1::without_caps(), &buf) {
                        Ok(sig) => Ok(sig),
-                       Err(_) => return Err(DecodeError::BadSignature),
+                       Err(_) => return Err(DecodeError::InvalidValue),
                }
        }
 }