@@ -355,7 +355,7 @@ pub mod hex_string_as_object_id {
355
355
#[ cfg( feature = "uuid-0_8" ) ]
356
356
#[ cfg_attr( docsrs, doc( cfg( feature = "uuid-0_8" ) ) ) ]
357
357
pub mod uuid_as_binary {
358
- use crate :: { spec :: BinarySubtype , Binary } ;
358
+ use crate :: Binary ;
359
359
use serde:: { de, Deserialize , Deserializer , Serialize , Serializer } ;
360
360
use std:: result:: Result ;
361
361
use uuid:: Uuid ;
@@ -374,21 +374,7 @@ pub mod uuid_as_binary {
374
374
D : Deserializer < ' de > ,
375
375
{
376
376
let binary = Binary :: deserialize ( deserializer) ?;
377
- if binary. subtype == BinarySubtype :: Uuid {
378
- if binary. bytes . len ( ) == 16 {
379
- let mut bytes = [ 0u8 ; 16 ] ;
380
- bytes. copy_from_slice ( & binary. bytes ) ;
381
- Ok ( Uuid :: from_bytes ( bytes) )
382
- } else {
383
- Err ( de:: Error :: custom (
384
- "cannot convert Binary to Uuid: incorrect bytes length" ,
385
- ) )
386
- }
387
- } else {
388
- Err ( de:: Error :: custom (
389
- "cannot convert Binary to Uuid: incorrect binary subtype" ,
390
- ) )
391
- }
377
+ binary. to_uuid ( ) . map_err ( de:: Error :: custom)
392
378
}
393
379
}
394
380
@@ -412,21 +398,15 @@ pub mod uuid_as_binary {
412
398
#[ cfg( feature = "uuid-0_8" ) ]
413
399
#[ cfg_attr( docsrs, doc( cfg( feature = "uuid-0_8" ) ) ) ]
414
400
pub mod uuid_as_java_legacy_binary {
415
- use crate :: { spec :: BinarySubtype , Binary } ;
401
+ use crate :: { bson :: UuidRepresentation , Binary } ;
416
402
use serde:: { de, Deserialize , Deserializer , Serialize , Serializer } ;
417
403
use std:: result:: Result ;
418
404
use uuid:: Uuid ;
419
405
420
406
/// Serializes a Uuid as a Binary in a Java Legacy UUID format.
421
407
#[ cfg_attr( docsrs, doc( cfg( feature = "uuid-0_8" ) ) ) ]
422
408
pub fn serialize < S : Serializer > ( val : & Uuid , serializer : S ) -> Result < S :: Ok , S :: Error > {
423
- let mut bytes = val. as_bytes ( ) . to_vec ( ) ;
424
- bytes[ 0 ..8 ] . reverse ( ) ;
425
- bytes[ 8 ..16 ] . reverse ( ) ;
426
- let binary = Binary {
427
- subtype : BinarySubtype :: UuidOld ,
428
- bytes,
429
- } ;
409
+ let binary = Binary :: from_uuid_with_representation ( * val, UuidRepresentation :: JavaLegacy ) ;
430
410
binary. serialize ( serializer)
431
411
}
432
412
@@ -437,17 +417,9 @@ pub mod uuid_as_java_legacy_binary {
437
417
D : Deserializer < ' de > ,
438
418
{
439
419
let binary = Binary :: deserialize ( deserializer) ?;
440
- if binary. subtype != BinarySubtype :: UuidOld {
441
- Err ( de:: Error :: custom ( "expecting BinarySubtype::UuidOld" ) )
442
- } else if binary. bytes . len ( ) != 16 {
443
- Err ( de:: Error :: custom ( "expecting 16 bytes" ) )
444
- } else {
445
- let mut buf = [ 0u8 ; 16 ] ;
446
- buf. copy_from_slice ( & binary. bytes ) ;
447
- buf[ 0 ..8 ] . reverse ( ) ;
448
- buf[ 8 ..16 ] . reverse ( ) ;
449
- Ok ( Uuid :: from_bytes ( buf) )
450
- }
420
+ binary
421
+ . to_uuid_with_representation ( UuidRepresentation :: JavaLegacy )
422
+ . map_err ( de:: Error :: custom)
451
423
}
452
424
}
453
425
@@ -471,18 +443,15 @@ pub mod uuid_as_java_legacy_binary {
471
443
#[ cfg( feature = "uuid-0_8" ) ]
472
444
#[ cfg_attr( docsrs, doc( cfg( feature = "uuid-0_8" ) ) ) ]
473
445
pub mod uuid_as_python_legacy_binary {
474
- use crate :: { spec :: BinarySubtype , Binary } ;
446
+ use crate :: { bson :: UuidRepresentation , Binary } ;
475
447
use serde:: { de, Deserialize , Deserializer , Serialize , Serializer } ;
476
448
use std:: result:: Result ;
477
449
use uuid:: Uuid ;
478
450
479
451
/// Serializes a Uuid as a Binary in a Python Legacy UUID format.
480
452
#[ cfg_attr( docsrs, doc( cfg( feature = "uuid-0_8" ) ) ) ]
481
453
pub fn serialize < S : Serializer > ( val : & Uuid , serializer : S ) -> Result < S :: Ok , S :: Error > {
482
- let binary = Binary {
483
- subtype : BinarySubtype :: UuidOld ,
484
- bytes : val. as_bytes ( ) . to_vec ( ) ,
485
- } ;
454
+ let binary = Binary :: from_uuid_with_representation ( * val, UuidRepresentation :: PythonLegacy ) ;
486
455
binary. serialize ( serializer)
487
456
}
488
457
@@ -493,15 +462,9 @@ pub mod uuid_as_python_legacy_binary {
493
462
D : Deserializer < ' de > ,
494
463
{
495
464
let binary = Binary :: deserialize ( deserializer) ?;
496
- if binary. subtype != BinarySubtype :: UuidOld {
497
- Err ( de:: Error :: custom ( "expecting BinarySubtype::UuidOld" ) )
498
- } else if binary. bytes . len ( ) != 16 {
499
- Err ( de:: Error :: custom ( "expecting 16 bytes" ) )
500
- } else {
501
- let mut buf = [ 0u8 ; 16 ] ;
502
- buf. copy_from_slice ( & binary. bytes ) ;
503
- Ok ( Uuid :: from_bytes ( buf) )
504
- }
465
+ binary
466
+ . to_uuid_with_representation ( UuidRepresentation :: PythonLegacy )
467
+ . map_err ( de:: Error :: custom)
505
468
}
506
469
}
507
470
@@ -525,22 +488,15 @@ pub mod uuid_as_python_legacy_binary {
525
488
#[ cfg( feature = "uuid-0_8" ) ]
526
489
#[ cfg_attr( docsrs, doc( cfg( feature = "uuid-0_8" ) ) ) ]
527
490
pub mod uuid_as_c_sharp_legacy_binary {
528
- use crate :: { spec :: BinarySubtype , Binary } ;
491
+ use crate :: { bson :: UuidRepresentation , Binary } ;
529
492
use serde:: { de, Deserialize , Deserializer , Serialize , Serializer } ;
530
493
use std:: result:: Result ;
531
494
use uuid:: Uuid ;
532
495
533
496
/// Serializes a Uuid as a Binary in a C# Legacy UUID format.
534
497
#[ cfg_attr( docsrs, doc( cfg( feature = "uuid-0_8" ) ) ) ]
535
498
pub fn serialize < S : Serializer > ( val : & Uuid , serializer : S ) -> Result < S :: Ok , S :: Error > {
536
- let mut bytes = val. as_bytes ( ) . to_vec ( ) ;
537
- bytes[ 0 ..4 ] . reverse ( ) ;
538
- bytes[ 4 ..6 ] . reverse ( ) ;
539
- bytes[ 6 ..8 ] . reverse ( ) ;
540
- let binary = Binary {
541
- subtype : BinarySubtype :: UuidOld ,
542
- bytes,
543
- } ;
499
+ let binary = Binary :: from_uuid_with_representation ( * val, UuidRepresentation :: CSharpLegacy ) ;
544
500
binary. serialize ( serializer)
545
501
}
546
502
@@ -551,18 +507,9 @@ pub mod uuid_as_c_sharp_legacy_binary {
551
507
D : Deserializer < ' de > ,
552
508
{
553
509
let binary = Binary :: deserialize ( deserializer) ?;
554
- if binary. subtype != BinarySubtype :: UuidOld {
555
- Err ( de:: Error :: custom ( "expecting BinarySubtype::UuidOld" ) )
556
- } else if binary. bytes . len ( ) != 16 {
557
- Err ( de:: Error :: custom ( "expecting 16 bytes" ) )
558
- } else {
559
- let mut buf = [ 0u8 ; 16 ] ;
560
- buf. copy_from_slice ( & binary. bytes ) ;
561
- buf[ 0 ..4 ] . reverse ( ) ;
562
- buf[ 4 ..6 ] . reverse ( ) ;
563
- buf[ 6 ..8 ] . reverse ( ) ;
564
- Ok ( Uuid :: from_bytes ( buf) )
565
- }
510
+ binary
511
+ . to_uuid_with_representation ( UuidRepresentation :: CSharpLegacy )
512
+ . map_err ( de:: Error :: custom)
566
513
}
567
514
}
568
515
0 commit comments