@@ -263,30 +263,38 @@ impl<R: Read, T: Readable<R>> Readable<R> for Vec<T> {
263
263
}
264
264
}
265
265
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
+ }
278
279
}
279
280
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
+ }
290
298
}
291
299
292
300
impl < W : Write > Writeable < W > for PublicKey {
@@ -314,21 +322,7 @@ impl<W: Write> Writeable<W> for Sha256dHash {
314
322
impl < R : Read > Readable < R > for Sha256dHash {
315
323
fn read ( r : & mut Reader < R > ) -> Result < Sha256dHash , DecodeError > {
316
324
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) )
332
326
}
333
327
}
334
328
0 commit comments