@@ -302,7 +302,7 @@ macro_rules! register_type {
302
302
enum Encoded {
303
303
Bincode ( serde_bytes:: ByteBuf ) ,
304
304
Json ( serde_bytes:: ByteBuf ) ,
305
- // todo: multipart
305
+ Multipart ( serde_multipart :: Message ) ,
306
306
}
307
307
308
308
impl Encoded {
@@ -311,6 +311,7 @@ impl Encoded {
311
311
match & self {
312
312
Encoded :: Bincode ( data) => data. len ( ) ,
313
313
Encoded :: Json ( data) => data. len ( ) ,
314
+ Encoded :: Multipart ( message) => message. len ( ) ,
314
315
}
315
316
}
316
317
@@ -319,6 +320,7 @@ impl Encoded {
319
320
match & self {
320
321
Encoded :: Bincode ( data) => data. is_empty ( ) ,
321
322
Encoded :: Json ( data) => data. is_empty ( ) ,
323
+ Encoded :: Multipart ( message) => message. is_empty ( ) ,
322
324
}
323
325
}
324
326
@@ -327,6 +329,14 @@ impl Encoded {
327
329
match & self {
328
330
Encoded :: Bincode ( data) => crc32fast:: hash ( data) ,
329
331
Encoded :: Json ( data) => crc32fast:: hash ( data) ,
332
+ Encoded :: Multipart ( message) => {
333
+ let mut hasher = crc32fast:: Hasher :: new ( ) ;
334
+ hasher. update ( message. body ( ) . as_ref ( ) ) ;
335
+ for part in message. parts ( ) {
336
+ hasher. update ( part. as_ref ( ) ) ;
337
+ }
338
+ hasher. finalize ( )
339
+ }
330
340
}
331
341
}
332
342
}
@@ -336,6 +346,7 @@ impl std::fmt::Debug for Encoded {
336
346
match self {
337
347
Encoded :: Bincode ( data) => write ! ( f, "Encoded::Bincode({})" , HexFmt ( data. as_slice( ) ) ) ,
338
348
Encoded :: Json ( data) => write ! ( f, "Encoded::Json({})" , HexFmt ( data. as_slice( ) ) ) ,
349
+ Encoded :: Multipart ( message) => todo ! ( ) , //write!(f, "Encoded::Multipart({})", HexFmt(data.as_slice())),
339
350
}
340
351
}
341
352
}
@@ -392,14 +403,17 @@ impl Serialized {
392
403
match & self . encoded {
393
404
Encoded :: Bincode ( data) => bincode:: deserialize ( data) . map_err ( anyhow:: Error :: from) ,
394
405
Encoded :: Json ( data) => serde_json:: from_slice ( data) . map_err ( anyhow:: Error :: from) ,
406
+ Encoded :: Multipart ( message) => {
407
+ serde_multipart:: deserialize_bincode ( message. clone ( ) ) . map_err ( anyhow:: Error :: from)
408
+ }
395
409
}
396
410
}
397
411
398
412
/// Transcode the serialized value to JSON. This operation will succeed if the type hash
399
413
/// is embedded in the value, and the corresponding type is available in this binary.
400
414
pub fn transcode_to_json ( self ) -> Result < Self , Self > {
401
415
match self . encoded {
402
- Encoded :: Bincode ( _) => {
416
+ Encoded :: Bincode ( _) | Encoded :: Multipart ( _ ) => {
403
417
let json_value = match self . dump ( ) {
404
418
Ok ( json_value) => json_value,
405
419
Err ( _) => return Err ( self ) ,
@@ -431,6 +445,10 @@ impl Serialized {
431
445
typeinfo. dump ( self . clone ( ) )
432
446
}
433
447
Encoded :: Json ( data) => serde_json:: from_slice ( data) . map_err ( anyhow:: Error :: from) ,
448
+ Encoded :: Multipart ( _) => {
449
+ // TODO: implement typeinfo.dump_multipart
450
+ anyhow:: bail!( "dumping multipart-encoded values is not yet supported" )
451
+ }
434
452
}
435
453
}
436
454
0 commit comments