Skip to content

Commit a6fb12c

Browse files
committed
Other fixes in ser.rs
Remove Option<T> instead add Option<Script> equivalent Remove Script serialization Fix in Sha256dHash serialization
1 parent 204a0d0 commit a6fb12c

File tree

1 file changed

+31
-37
lines changed

1 file changed

+31
-37
lines changed

src/util/ser.rs

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -263,30 +263,38 @@ impl<R: Read, T: Readable<R>> Readable<R> for Vec<T> {
263263
}
264264
}
265265

266-
impl<W: Write, T: Writeable<W>> Writeable<W> for Option<T> {
267-
#[inline]
268-
fn write(&self, w: &mut Writer<W>) -> Result<(), Error> {
269-
match self {
270-
Some(data) => {
271-
true.write(w)?;
272-
data.write(w)?;
273-
}
274-
None => { false.write(w)?; }
275-
}
276-
Ok(())
277-
}
266+
impl<W, T> Writeable<W> for Option<T>
267+
where W: Write,
268+
T: ::std::ops::Index<::std::ops::RangeFull, Output=[u8]>
269+
{
270+
#[inline]
271+
fn write(&self, w: &mut Writer<W>) -> Result<(), DecodeError> {
272+
if let Some(data) = self {
273+
data[..].write(w)?;
274+
} else {
275+
0u16.write(w)?;
276+
}
277+
Ok(())
278+
}
278279
}
279280

280-
impl<R: Read, T:Readable<R>> Readable<R> for Option<T> {
281-
#[inline]
282-
fn read(r: &mut Reader<R>) -> Result<Option<T>, Error> {
283-
let f: bool = Readable::read(r)?;
284-
Ok(if f {
285-
Some(Readable::read(r)?)
286-
} else {
287-
None
288-
})
289-
}
281+
impl<R, T> Readable<R> for Option<T>
282+
where R: Read,
283+
T: From<Vec<u8>>,
284+
{
285+
#[inline]
286+
fn read(r: &mut Reader<R>) -> Result<Option<T>, DecodeError> {
287+
match <u16 as Readable<R>>::read(r)? as usize {
288+
0 => {
289+
Ok(None)
290+
},
291+
len => {
292+
let mut buf = vec![0; len];
293+
r.read_exact(&mut buf)?;
294+
Ok(Some(T::from(buf)))
295+
}
296+
}
297+
}
290298
}
291299

292300
impl<W: Write> Writeable<W> for PublicKey {
@@ -314,21 +322,7 @@ impl<W: Write> Writeable<W> for Sha256dHash {
314322
impl<R: Read> Readable<R> for Sha256dHash {
315323
fn read(r: &mut Reader<R>) -> Result<Sha256dHash, DecodeError> {
316324
let buf: [u8; 32] = Readable::read(r)?;
317-
Ok(buf)
318-
}
319-
}
320-
321-
impl<W: Write> Writeable<W> for Script {
322-
fn write(&self, w: &mut Writer<W>) -> Result<(), Error> {
323-
self[..].write(w)
324-
}
325-
}
326-
327-
impl<R: Read> Readable<R> for Script {
328-
fn read(r: &mut Reader<R>) -> Result<Script, Error> {
329-
let sz: u16 = Readable::read(r)?;
330-
let v = r.read_fixed_size(sz as usize)?;
331-
Ok(Script::from(v))
325+
Ok(Sha256dHash::from_data(&buf))
332326
}
333327
}
334328

0 commit comments

Comments
 (0)