@@ -102,26 +102,23 @@ impl CqlTimeuuid {
102102 // 4 bytes 2 bytes 2 bytes
103103 // time_low - time_mid - time_hi_and_version
104104 let bytes = self . 0 . as_bytes ( ) ;
105- ( ( bytes[ 6 ] & 0x0F ) as u64 ) << 56
106- | ( bytes[ 7 ] as u64 ) << 48
107- | ( bytes[ 4 ] as u64 ) << 40
108- | ( bytes[ 5 ] as u64 ) << 32
109- | ( bytes[ 0 ] as u64 ) << 24
110- | ( bytes[ 1 ] as u64 ) << 16
111- | ( bytes[ 2 ] as u64 ) << 8
112- | ( bytes[ 3 ] as u64 )
105+ u64:: from_be_bytes ( [
106+ bytes[ 6 ] & 0x0f ,
107+ bytes[ 7 ] ,
108+ bytes[ 4 ] ,
109+ bytes[ 5 ] ,
110+ bytes[ 0 ] ,
111+ bytes[ 1 ] ,
112+ bytes[ 2 ] ,
113+ bytes[ 3 ] ,
114+ ] )
113115 }
114116
115117 fn lsb ( & self ) -> u64 {
116118 let bytes = self . 0 . as_bytes ( ) ;
117- ( bytes[ 8 ] as u64 ) << 56
118- | ( bytes[ 9 ] as u64 ) << 48
119- | ( bytes[ 10 ] as u64 ) << 40
120- | ( bytes[ 11 ] as u64 ) << 32
121- | ( bytes[ 12 ] as u64 ) << 24
122- | ( bytes[ 13 ] as u64 ) << 16
123- | ( bytes[ 14 ] as u64 ) << 8
124- | ( bytes[ 15 ] as u64 )
119+ u64:: from_be_bytes ( [
120+ bytes[ 8 ] , bytes[ 9 ] , bytes[ 10 ] , bytes[ 11 ] , bytes[ 12 ] , bytes[ 13 ] , bytes[ 14 ] , bytes[ 15 ] ,
121+ ] )
125122 }
126123
127124 fn lsb_signed ( & self ) -> u64 {
@@ -1249,3 +1246,39 @@ pub fn deser_cql_value(
12491246pub struct Row {
12501247 pub columns : Vec < Option < CqlValue > > ,
12511248}
1249+
1250+ #[ cfg( test) ]
1251+ mod tests {
1252+ use std:: str:: FromStr as _;
1253+
1254+ use super :: * ;
1255+
1256+ #[ test]
1257+ fn timeuuid_msb_byte_order ( ) {
1258+ let uuid = CqlTimeuuid :: from_str ( "00010203-0405-0607-0809-0a0b0c0d0e0f" ) . unwrap ( ) ;
1259+
1260+ assert_eq ! ( 0x0607040500010203 , uuid. msb( ) ) ;
1261+ }
1262+
1263+ #[ test]
1264+ fn timeuuid_msb_clears_version_bits ( ) {
1265+ // UUID version nibble should be cleared
1266+ let uuid = CqlTimeuuid :: from_str ( "ffffffff-ffff-ffff-ffff-ffffffffffff" ) . unwrap ( ) ;
1267+
1268+ assert_eq ! ( 0x0fffffffffffffff , uuid. msb( ) ) ;
1269+ }
1270+
1271+ #[ test]
1272+ fn timeuuid_lsb_byte_order ( ) {
1273+ let uuid = CqlTimeuuid :: from_str ( "00010203-0405-0607-0809-0a0b0c0d0e0f" ) . unwrap ( ) ;
1274+
1275+ assert_eq ! ( 0x08090a0b0c0d0e0f , uuid. lsb( ) ) ;
1276+ }
1277+
1278+ #[ test]
1279+ fn timeuuid_lsb_modifies_no_bits ( ) {
1280+ let uuid = CqlTimeuuid :: from_str ( "ffffffff-ffff-ffff-ffff-ffffffffffff" ) . unwrap ( ) ;
1281+
1282+ assert_eq ! ( 0xffffffffffffffff , uuid. lsb( ) ) ;
1283+ }
1284+ }
0 commit comments