@@ -296,7 +296,7 @@ macro_rules! register_type {
296
296
enum Encoded {
297
297
Bincode ( serde_bytes:: ByteBuf ) ,
298
298
Json ( serde_bytes:: ByteBuf ) ,
299
- // todo: multipart
299
+ Multipart ( serde_multipart :: Message ) ,
300
300
}
301
301
302
302
impl Encoded {
@@ -305,6 +305,7 @@ impl Encoded {
305
305
match & self {
306
306
Encoded :: Bincode ( data) => data. len ( ) ,
307
307
Encoded :: Json ( data) => data. len ( ) ,
308
+ Encoded :: Multipart ( message) => message. len ( ) ,
308
309
}
309
310
}
310
311
@@ -313,6 +314,7 @@ impl Encoded {
313
314
match & self {
314
315
Encoded :: Bincode ( data) => data. is_empty ( ) ,
315
316
Encoded :: Json ( data) => data. is_empty ( ) ,
317
+ Encoded :: Multipart ( message) => message. is_empty ( ) ,
316
318
}
317
319
}
318
320
@@ -321,6 +323,14 @@ impl Encoded {
321
323
match & self {
322
324
Encoded :: Bincode ( data) => crc32fast:: hash ( data) ,
323
325
Encoded :: Json ( data) => crc32fast:: hash ( data) ,
326
+ Encoded :: Multipart ( message) => {
327
+ let mut hasher = crc32fast:: Hasher :: new ( ) ;
328
+ hasher. update ( message. body ( ) . as_ref ( ) ) ;
329
+ for part in message. parts ( ) {
330
+ hasher. update ( part. as_ref ( ) ) ;
331
+ }
332
+ hasher. finalize ( )
333
+ }
324
334
}
325
335
}
326
336
}
@@ -330,6 +340,7 @@ impl std::fmt::Debug for Encoded {
330
340
match self {
331
341
Encoded :: Bincode ( data) => write ! ( f, "Encoded::Bincode({})" , HexFmt ( data. as_slice( ) ) ) ,
332
342
Encoded :: Json ( data) => write ! ( f, "Encoded::Json({})" , HexFmt ( data. as_slice( ) ) ) ,
343
+ Encoded :: Multipart ( message) => todo ! ( ) , //write!(f, "Encoded::Multipart({})", HexFmt(data.as_slice())),
333
344
}
334
345
}
335
346
}
@@ -386,14 +397,17 @@ impl Serialized {
386
397
match & self . encoded {
387
398
Encoded :: Bincode ( data) => bincode:: deserialize ( data) . map_err ( anyhow:: Error :: from) ,
388
399
Encoded :: Json ( data) => serde_json:: from_slice ( data) . map_err ( anyhow:: Error :: from) ,
400
+ Encoded :: Multipart ( message) => {
401
+ serde_multipart:: deserialize_bincode ( message. clone ( ) ) . map_err ( anyhow:: Error :: from)
402
+ }
389
403
}
390
404
}
391
405
392
406
/// Transcode the serialized value to JSON. This operation will succeed if the type hash
393
407
/// is embedded in the value, and the corresponding type is available in this binary.
394
408
pub fn transcode_to_json ( self ) -> Result < Self , Self > {
395
409
match self . encoded {
396
- Encoded :: Bincode ( _) => {
410
+ Encoded :: Bincode ( _) | Encoded :: Multipart ( _ ) => {
397
411
let json_value = match self . dump ( ) {
398
412
Ok ( json_value) => json_value,
399
413
Err ( _) => return Err ( self ) ,
@@ -425,6 +439,10 @@ impl Serialized {
425
439
typeinfo. dump ( self . clone ( ) )
426
440
}
427
441
Encoded :: Json ( data) => serde_json:: from_slice ( data) . map_err ( anyhow:: Error :: from) ,
442
+ Encoded :: Multipart ( _) => {
443
+ // TODO: implement typeinfo.dump_multipart
444
+ anyhow:: bail!( "dumping multipart-encoded values is not yet supported" )
445
+ }
428
446
}
429
447
}
430
448
0 commit comments