1use num_bigint::Sign;
5use reifydb_type::value::{
6 Value,
7 blob::Blob,
8 date::Date,
9 datetime::DateTime,
10 decimal::Decimal,
11 dictionary::DictionaryEntryId,
12 duration::Duration,
13 identity::IdentityId,
14 int::Int,
15 row_number::RowNumber,
16 time::Time,
17 r#type::Type,
18 uint::Uint,
19 uuid::{Uuid4, Uuid7},
20};
21use serde::Serialize;
22
23use super::{
24 catalog, encode_bool, encode_bytes, encode_f32, encode_f64, encode_i8, encode_i16, encode_i32, encode_i64,
25 encode_i128, encode_u8, encode_u16, encode_u32, encode_u64, encode_u128, serialize,
26};
27use crate::{
28 encoded::key::EncodedKey,
29 interface::catalog::{id::IndexId, shape::ShapeId},
30};
31
32pub struct KeySerializer {
34 buffer: Vec<u8>,
35}
36
37impl KeySerializer {
38 pub fn new() -> Self {
40 Self {
41 buffer: Vec::new(),
42 }
43 }
44
45 pub fn with_capacity(capacity: usize) -> Self {
47 Self {
48 buffer: Vec::with_capacity(capacity),
49 }
50 }
51
52 pub fn extend_bool(&mut self, value: bool) -> &mut Self {
54 self.buffer.push(encode_bool(value));
55 self
56 }
57
58 pub fn extend_f32(&mut self, value: f32) -> &mut Self {
60 self.buffer.extend_from_slice(&encode_f32(value));
61 self
62 }
63
64 pub fn extend_f64(&mut self, value: f64) -> &mut Self {
66 self.buffer.extend_from_slice(&encode_f64(value));
67 self
68 }
69
70 pub fn extend_i8<T: Into<i8>>(&mut self, value: T) -> &mut Self {
72 self.buffer.extend_from_slice(&encode_i8(value.into()));
73 self
74 }
75
76 pub fn extend_i16<T: Into<i16>>(&mut self, value: T) -> &mut Self {
78 self.buffer.extend_from_slice(&encode_i16(value.into()));
79 self
80 }
81
82 pub fn extend_i32<T: Into<i32>>(&mut self, value: T) -> &mut Self {
84 self.buffer.extend_from_slice(&encode_i32(value.into()));
85 self
86 }
87
88 pub fn extend_i64<T: Into<i64>>(&mut self, value: T) -> &mut Self {
90 self.buffer.extend_from_slice(&encode_i64(value.into()));
91 self
92 }
93
94 pub fn extend_i128<T: Into<i128>>(&mut self, value: T) -> &mut Self {
96 self.buffer.extend_from_slice(&encode_i128(value.into()));
97 self
98 }
99
100 pub fn extend_u8<T: Into<u8>>(&mut self, value: T) -> &mut Self {
102 self.buffer.push(encode_u8(value.into()));
103 self
104 }
105
106 pub fn extend_u16<T: Into<u16>>(&mut self, value: T) -> &mut Self {
108 self.buffer.extend_from_slice(&encode_u16(value.into()));
109 self
110 }
111
112 pub fn extend_u32<T: Into<u32>>(&mut self, value: T) -> &mut Self {
114 self.buffer.extend_from_slice(&encode_u32(value.into()));
115 self
116 }
117
118 pub fn extend_u64<T: Into<u64>>(&mut self, value: T) -> &mut Self {
120 self.buffer.extend_from_slice(&encode_u64(value.into()));
121 self
122 }
123
124 pub fn extend_u128<T: Into<u128>>(&mut self, value: T) -> &mut Self {
126 self.buffer.extend_from_slice(&encode_u128(value.into()));
127 self
128 }
129
130 pub fn extend_bytes<T: AsRef<[u8]>>(&mut self, bytes: T) -> &mut Self {
132 encode_bytes(bytes.as_ref(), &mut self.buffer);
133 self
134 }
135
136 pub fn extend_str<T: AsRef<str>>(&mut self, s: T) -> &mut Self {
138 self.extend_bytes(s.as_ref().as_bytes())
139 }
140
141 pub fn finish(self) -> Vec<u8> {
143 self.buffer
144 }
145
146 pub fn to_encoded_key(self) -> EncodedKey {
148 EncodedKey::new(self.buffer)
149 }
150
151 pub fn extend_shape_id(&mut self, object: impl Into<ShapeId>) -> &mut Self {
153 let primitive = object.into();
154 self.buffer.extend_from_slice(&catalog::serialize_shape_id(&primitive));
155 self
156 }
157
158 pub fn extend_index_id(&mut self, index: impl Into<IndexId>) -> &mut Self {
160 let index = index.into();
161 self.buffer.extend_from_slice(&catalog::serialize_index_id(&index));
162 self
163 }
164
165 pub fn extend_serialize<T: Serialize>(&mut self, value: &T) -> &mut Self {
167 self.buffer.extend_from_slice(&serialize(value));
168 self
169 }
170
171 pub fn extend_raw(&mut self, bytes: &[u8]) -> &mut Self {
173 self.buffer.extend_from_slice(bytes);
174 self
175 }
176
177 pub fn len(&self) -> usize {
179 self.buffer.len()
180 }
181
182 pub fn is_empty(&self) -> bool {
184 self.buffer.is_empty()
185 }
186
187 pub fn extend_date(&mut self, date: &Date) -> &mut Self {
189 self.extend_i32(date.to_days_since_epoch())
190 }
191
192 pub fn extend_datetime(&mut self, datetime: &DateTime) -> &mut Self {
194 self.extend_u64(datetime.to_nanos())
195 }
196
197 pub fn extend_time(&mut self, time: &Time) -> &mut Self {
199 self.extend_u64(time.to_nanos_since_midnight())
200 }
201
202 pub fn extend_duration(&mut self, duration: &Duration) -> &mut Self {
204 self.extend_i32(duration.get_months()).extend_i32(duration.get_days()).extend_i64(duration.get_nanos())
205 }
206
207 pub fn extend_row_number(&mut self, row_number: &RowNumber) -> &mut Self {
209 self.extend_u64(row_number.0)
210 }
211
212 pub fn extend_identity_id(&mut self, id: &IdentityId) -> &mut Self {
214 self.extend_bytes(id.as_bytes())
215 }
216
217 pub fn extend_uuid4(&mut self, uuid: &Uuid4) -> &mut Self {
219 self.extend_bytes(uuid.as_bytes())
220 }
221
222 pub fn extend_uuid7(&mut self, uuid: &Uuid7) -> &mut Self {
224 self.extend_bytes(uuid.as_bytes())
225 }
226
227 pub fn extend_blob(&mut self, blob: &Blob) -> &mut Self {
229 self.extend_bytes(blob.as_ref() as &[u8])
230 }
231
232 pub fn extend_int(&mut self, int: &Int) -> &mut Self {
234 let (sign, bytes) = int.to_bytes_be();
236 self.buffer.push(match sign {
238 Sign::Minus => 0,
239 _ => 1,
240 });
241 self.extend_u32(bytes.len() as u32);
242 self.buffer.extend_from_slice(&bytes);
243 self
244 }
245
246 pub fn extend_uint(&mut self, uint: &Uint) -> &mut Self {
248 let (_sign, bytes) = uint.0.to_bytes_be();
250 self.extend_u32(bytes.len() as u32);
251 self.buffer.extend_from_slice(&bytes);
252 self
253 }
254
255 pub fn extend_decimal(&mut self, decimal: &Decimal) -> &mut Self {
257 let s = decimal.to_string();
260 self.extend_str(&s);
261 self
262 }
263
264 pub fn extend_value(&mut self, value: &Value) -> &mut Self {
267 match value {
268 Value::None {
269 inner,
270 ..
271 } => {
272 self.buffer.push(0x00);
273 self.buffer.push(match inner {
274 Type::Any => 0x00,
275 Type::Boolean => 0x01,
276 Type::Float4 => 0x02,
277 Type::Float8 => 0x03,
278 Type::Int1 => 0x04,
279 Type::Int2 => 0x05,
280 Type::Int4 => 0x06,
281 Type::Int8 => 0x07,
282 Type::Int16 => 0x08,
283 Type::Utf8 => 0x09,
284 Type::Uint1 => 0x0a,
285 Type::Uint2 => 0x0b,
286 Type::Uint4 => 0x0c,
287 Type::Uint8 => 0x0d,
288 Type::Uint16 => 0x0e,
289 Type::Date => 0x0f,
290 Type::DateTime => 0x10,
291 Type::Time => 0x11,
292 Type::Duration => 0x12,
293 Type::IdentityId => 0x14,
294 Type::Uuid4 => 0x15,
295 Type::Uuid7 => 0x16,
296 Type::Blob => 0x17,
297 Type::Int => 0x18,
298 Type::Uint => 0x19,
299 Type::Decimal => 0x1a,
300 Type::DictionaryId => 0x1b,
301 _ => unreachable!(
302 "Option/List/Record/Tuple types cannot be encoded as None inner type in keys"
303 ),
304 });
305 }
306 Value::Boolean(b) => {
307 self.buffer.push(0x01);
308 self.extend_bool(*b);
309 }
310 Value::Float4(f) => {
311 self.buffer.push(0x02);
312 self.extend_f32(**f);
313 }
314 Value::Float8(f) => {
315 self.buffer.push(0x03);
316 self.extend_f64(**f);
317 }
318 Value::Int1(i) => {
319 self.buffer.push(0x04);
320 self.extend_i8(*i);
321 }
322 Value::Int2(i) => {
323 self.buffer.push(0x05);
324 self.extend_i16(*i);
325 }
326 Value::Int4(i) => {
327 self.buffer.push(0x06);
328 self.extend_i32(*i);
329 }
330 Value::Int8(i) => {
331 self.buffer.push(0x07);
332 self.extend_i64(*i);
333 }
334 Value::Int16(i) => {
335 self.buffer.push(0x08);
336 self.extend_i128(*i);
337 }
338 Value::Utf8(s) => {
339 self.buffer.push(0x09);
340 self.extend_str(s);
341 }
342 Value::Uint1(u) => {
343 self.buffer.push(0x0a);
344 self.extend_u8(*u);
345 }
346 Value::Uint2(u) => {
347 self.buffer.push(0x0b);
348 self.extend_u16(*u);
349 }
350 Value::Uint4(u) => {
351 self.buffer.push(0x0c);
352 self.extend_u32(*u);
353 }
354 Value::Uint8(u) => {
355 self.buffer.push(0x0d);
356 self.extend_u64(*u);
357 }
358 Value::Uint16(u) => {
359 self.buffer.push(0x0e);
360 self.extend_u128(*u);
361 }
362 Value::Date(d) => {
363 self.buffer.push(0x0f);
364 self.extend_date(d);
365 }
366 Value::DateTime(dt) => {
367 self.buffer.push(0x10);
368 self.extend_datetime(dt);
369 }
370 Value::Time(t) => {
371 self.buffer.push(0x11);
372 self.extend_time(t);
373 }
374 Value::Duration(i) => {
375 self.buffer.push(0x12);
376 self.extend_duration(i);
377 }
378 Value::IdentityId(id) => {
379 self.buffer.push(0x14);
380 self.extend_identity_id(id);
381 }
382 Value::Uuid4(uuid) => {
383 self.buffer.push(0x15);
384 self.extend_uuid4(uuid);
385 }
386 Value::Uuid7(uuid) => {
387 self.buffer.push(0x16);
388 self.extend_uuid7(uuid);
389 }
390 Value::Blob(b) => {
391 self.buffer.push(0x17);
392 self.extend_blob(b);
393 }
394 Value::Int(i) => {
395 self.buffer.push(0x18);
396 self.extend_int(i);
397 }
398 Value::Uint(u) => {
399 self.buffer.push(0x19);
400 self.extend_uint(u);
401 }
402 Value::Decimal(d) => {
403 self.buffer.push(0x1a);
404 self.extend_decimal(d);
405 }
406 Value::Any(_) | Value::Type(_) | Value::List(_) | Value::Record(_) | Value::Tuple(_) => {
407 unreachable!("Any/Type/List/Record/Tuple values cannot be serialized in keys");
408 }
409 Value::DictionaryId(id) => {
410 self.buffer.push(0x1b);
411 match id {
412 DictionaryEntryId::U1(v) => {
413 self.buffer.push(0x00);
414 self.extend_u8(*v);
415 }
416 DictionaryEntryId::U2(v) => {
417 self.buffer.push(0x01);
418 self.extend_u16(*v);
419 }
420 DictionaryEntryId::U4(v) => {
421 self.buffer.push(0x02);
422 self.extend_u32(*v);
423 }
424 DictionaryEntryId::U8(v) => {
425 self.buffer.push(0x03);
426 self.extend_u64(*v);
427 }
428 DictionaryEntryId::U16(v) => {
429 self.buffer.push(0x04);
430 self.extend_u128(*v);
431 }
432 }
433 }
434 }
435 self
436 }
437}
438
439impl Default for KeySerializer {
440 fn default() -> Self {
441 Self::new()
442 }
443}
444
445#[cfg(test)]
446pub mod tests {
447 use std::{f64, str::FromStr};
448
449 use num_bigint::BigInt;
450 use reifydb_runtime::context::{
451 clock::{Clock, MockClock},
452 rng::Rng,
453 };
454 use reifydb_type::{
455 util::hex,
456 value::{
457 Value,
458 blob::Blob,
459 date::Date,
460 datetime::DateTime,
461 decimal::Decimal,
462 dictionary::DictionaryEntryId,
463 duration::Duration,
464 identity::IdentityId,
465 int::Int,
466 ordered_f32::OrderedF32,
467 ordered_f64::OrderedF64,
468 row_number::RowNumber,
469 time::Time,
470 r#type::Type,
471 uint::Uint,
472 uuid::{Uuid4, Uuid7},
473 },
474 };
475
476 use crate::{
477 interface::catalog::{
478 id::{IndexId, PrimaryKeyId, TableId},
479 shape::ShapeId,
480 },
481 util::encoding::keycode::{deserializer::KeyDeserializer, serializer::KeySerializer},
482 };
483
484 fn test_clock_and_rng() -> (MockClock, Clock, Rng) {
485 let mock = MockClock::from_millis(1000);
486 let clock = Clock::Mock(mock.clone());
487 let rng = Rng::seeded(42);
488 (mock, clock, rng)
489 }
490
491 #[test]
492 fn test_new() {
493 let serializer = KeySerializer::new();
494 assert!(serializer.is_empty());
495 assert_eq!(serializer.len(), 0);
496 }
497
498 #[test]
499 fn test_with_capacity() {
500 let serializer = KeySerializer::with_capacity(100);
501 assert!(serializer.is_empty());
502 assert_eq!(serializer.len(), 0);
503 }
504
505 #[test]
506 fn test_extend_bool() {
507 let mut serializer = KeySerializer::new();
508 serializer.extend_bool(true);
509 let result = serializer.finish();
510 assert_eq!(result, vec![0x00]);
511 assert_eq!(hex::encode(&result), "00");
512
513 let mut serializer = KeySerializer::new();
514 serializer.extend_bool(false);
515 let result = serializer.finish();
516 assert_eq!(result, vec![0x01]);
517 assert_eq!(hex::encode(&result), "01");
518 }
519
520 #[test]
521 fn test_extend_f32() {
522 let mut serializer = KeySerializer::new();
523 serializer.extend_f32(3.14f32);
524 let result = serializer.finish();
525 assert_eq!(result.len(), 4);
526 assert_eq!(hex::encode(&result), "3fb70a3c");
527
528 let mut serializer = KeySerializer::new();
529 serializer.extend_f32(-3.14f32);
530 let result = serializer.finish();
531 assert_eq!(result.len(), 4);
532 assert_eq!(hex::encode(&result), "c048f5c3");
533
534 let mut serializer = KeySerializer::new();
535 serializer.extend_f32(0.0f32);
536 let result = serializer.finish();
537 assert_eq!(hex::encode(&result), "7fffffff");
538
539 let mut serializer = KeySerializer::new();
540 serializer.extend_f32(f32::MAX);
541 let result = serializer.finish();
542 assert_eq!(hex::encode(&result), "00800000");
543
544 let mut serializer = KeySerializer::new();
545 serializer.extend_f32(f32::MIN);
546 let result = serializer.finish();
547 assert_eq!(hex::encode(&result), "ff7fffff");
548 }
549
550 #[test]
551 fn test_extend_f64() {
552 let mut serializer = KeySerializer::new();
553 serializer.extend_f64(f64::consts::PI);
554 let result = serializer.finish();
555 assert_eq!(result.len(), 8);
556 assert_eq!(hex::encode(&result), "3ff6de04abbbd2e7");
557
558 let mut serializer = KeySerializer::new();
559 serializer.extend_f64(-f64::consts::PI);
560 let result = serializer.finish();
561 assert_eq!(result.len(), 8);
562 assert_eq!(hex::encode(&result), "c00921fb54442d18");
563
564 let mut serializer = KeySerializer::new();
565 serializer.extend_f64(0.0f64);
566 let result = serializer.finish();
567 assert_eq!(hex::encode(&result), "7fffffffffffffff");
568 }
569
570 #[test]
571 fn test_extend_i8() {
572 let mut serializer = KeySerializer::new();
573 serializer.extend_i8(0i8);
574 let result = serializer.finish();
575 assert_eq!(hex::encode(&result), "7f");
576
577 let mut serializer = KeySerializer::new();
578 serializer.extend_i8(1i8);
579 let result = serializer.finish();
580 assert_eq!(hex::encode(&result), "7e");
581
582 let mut serializer = KeySerializer::new();
583 serializer.extend_i8(-1i8);
584 let result = serializer.finish();
585 assert_eq!(hex::encode(&result), "80");
586
587 let mut serializer = KeySerializer::new();
588 serializer.extend_i8(i8::MAX);
589 let result = serializer.finish();
590 assert_eq!(hex::encode(&result), "00");
591
592 let mut serializer = KeySerializer::new();
593 serializer.extend_i8(i8::MIN);
594 let result = serializer.finish();
595 assert_eq!(hex::encode(&result), "ff");
596 }
597
598 #[test]
599 fn test_extend_i16() {
600 let mut serializer = KeySerializer::new();
601 serializer.extend_i16(0i16);
602 let result = serializer.finish();
603 assert_eq!(hex::encode(&result), "7fff");
604
605 let mut serializer = KeySerializer::new();
606 serializer.extend_i16(1i16);
607 let result = serializer.finish();
608 assert_eq!(hex::encode(&result), "7ffe");
609
610 let mut serializer = KeySerializer::new();
611 serializer.extend_i16(-1i16);
612 let result = serializer.finish();
613 assert_eq!(hex::encode(&result), "8000");
614
615 let mut serializer = KeySerializer::new();
616 serializer.extend_i16(i16::MAX);
617 let result = serializer.finish();
618 assert_eq!(hex::encode(&result), "0000");
619
620 let mut serializer = KeySerializer::new();
621 serializer.extend_i16(i16::MIN);
622 let result = serializer.finish();
623 assert_eq!(hex::encode(&result), "ffff");
624 }
625
626 #[test]
627 fn test_extend_i32() {
628 let mut serializer = KeySerializer::new();
629 serializer.extend_i32(0i32);
630 let result = serializer.finish();
631 assert_eq!(hex::encode(&result), "7fffffff");
632
633 let mut serializer = KeySerializer::new();
634 serializer.extend_i32(1i32);
635 let result = serializer.finish();
636 assert_eq!(hex::encode(&result), "7ffffffe");
637
638 let mut serializer = KeySerializer::new();
639 serializer.extend_i32(-1i32);
640 let result = serializer.finish();
641 assert_eq!(hex::encode(&result), "80000000");
642
643 let mut serializer = KeySerializer::new();
644 serializer.extend_i32(i32::MAX);
645 let result = serializer.finish();
646 assert_eq!(hex::encode(&result), "00000000");
647
648 let mut serializer = KeySerializer::new();
649 serializer.extend_i32(i32::MIN);
650 let result = serializer.finish();
651 assert_eq!(hex::encode(&result), "ffffffff");
652 }
653
654 #[test]
655 fn test_extend_i64() {
656 let mut serializer = KeySerializer::new();
657 serializer.extend_i64(0i64);
658 let result = serializer.finish();
659 assert_eq!(hex::encode(&result), "7fffffffffffffff");
660
661 let mut serializer = KeySerializer::new();
662 serializer.extend_i64(1i64);
663 let result = serializer.finish();
664 assert_eq!(hex::encode(&result), "7ffffffffffffffe");
665
666 let mut serializer = KeySerializer::new();
667 serializer.extend_i64(-1i64);
668 let result = serializer.finish();
669 assert_eq!(hex::encode(&result), "8000000000000000");
670
671 let mut serializer = KeySerializer::new();
672 serializer.extend_i64(i64::MAX);
673 let result = serializer.finish();
674 assert_eq!(hex::encode(&result), "0000000000000000");
675
676 let mut serializer = KeySerializer::new();
677 serializer.extend_i64(i64::MIN);
678 let result = serializer.finish();
679 assert_eq!(hex::encode(&result), "ffffffffffffffff");
680 }
681
682 #[test]
683 fn test_extend_i128() {
684 let mut serializer = KeySerializer::new();
685 serializer.extend_i128(0i128);
686 let result = serializer.finish();
687 assert_eq!(hex::encode(&result), "7fffffffffffffffffffffffffffffff");
688
689 let mut serializer = KeySerializer::new();
690 serializer.extend_i128(1i128);
691 let result = serializer.finish();
692 assert_eq!(hex::encode(&result), "7ffffffffffffffffffffffffffffffe");
693
694 let mut serializer = KeySerializer::new();
695 serializer.extend_i128(-1i128);
696 let result = serializer.finish();
697 assert_eq!(hex::encode(&result), "80000000000000000000000000000000");
698
699 let mut serializer = KeySerializer::new();
700 serializer.extend_i128(i128::MAX);
701 let result = serializer.finish();
702 assert_eq!(hex::encode(&result), "00000000000000000000000000000000");
703
704 let mut serializer = KeySerializer::new();
705 serializer.extend_i128(i128::MIN);
706 let result = serializer.finish();
707 assert_eq!(hex::encode(&result), "ffffffffffffffffffffffffffffffff");
708 }
709
710 #[test]
711 fn test_extend_u8() {
712 let mut serializer = KeySerializer::new();
713 serializer.extend_u8(0u8);
714 let result = serializer.finish();
715 assert_eq!(hex::encode(&result), "ff");
716
717 let mut serializer = KeySerializer::new();
718 serializer.extend_u8(1u8);
719 let result = serializer.finish();
720 assert_eq!(hex::encode(&result), "fe");
721
722 let mut serializer = KeySerializer::new();
723 serializer.extend_u8(255u8);
724 let result = serializer.finish();
725 assert_eq!(hex::encode(&result), "00");
726 }
727
728 #[test]
729 fn test_extend_u16() {
730 let mut serializer = KeySerializer::new();
731 serializer.extend_u16(0u16);
732 let result = serializer.finish();
733 assert_eq!(hex::encode(&result), "ffff");
734
735 let mut serializer = KeySerializer::new();
736 serializer.extend_u16(1u16);
737 let result = serializer.finish();
738 assert_eq!(hex::encode(&result), "fffe");
739
740 let mut serializer = KeySerializer::new();
741 serializer.extend_u16(255u16);
742 let result = serializer.finish();
743 assert_eq!(hex::encode(&result), "ff00");
744
745 let mut serializer = KeySerializer::new();
746 serializer.extend_u16(u16::MAX);
747 let result = serializer.finish();
748 assert_eq!(hex::encode(&result), "0000");
749 }
750
751 #[test]
752 fn test_extend_u32() {
753 let mut serializer = KeySerializer::new();
754 serializer.extend_u32(0u32);
755 let result = serializer.finish();
756 assert_eq!(hex::encode(&result), "ffffffff");
757
758 let mut serializer = KeySerializer::new();
759 serializer.extend_u32(1u32);
760 let result = serializer.finish();
761 assert_eq!(hex::encode(&result), "fffffffe");
762
763 let mut serializer = KeySerializer::new();
764 serializer.extend_u32(u32::MAX);
765 let result = serializer.finish();
766 assert_eq!(hex::encode(&result), "00000000");
767 }
768
769 #[test]
770 fn test_extend_u64() {
771 let mut serializer = KeySerializer::new();
772 serializer.extend_u64(0u64);
773 let result = serializer.finish();
774 assert_eq!(hex::encode(&result), "ffffffffffffffff");
775
776 let mut serializer = KeySerializer::new();
777 serializer.extend_u64(1u64);
778 let result = serializer.finish();
779 assert_eq!(hex::encode(&result), "fffffffffffffffe");
780
781 let mut serializer = KeySerializer::new();
782 serializer.extend_u64(65535u64);
783 let result = serializer.finish();
784 assert_eq!(hex::encode(&result), "ffffffffffff0000");
785
786 let mut serializer = KeySerializer::new();
787 serializer.extend_u64(u64::MAX);
788 let result = serializer.finish();
789 assert_eq!(hex::encode(&result), "0000000000000000");
790 }
791
792 #[test]
793 fn test_extend_u128() {
794 let mut serializer = KeySerializer::new();
795 serializer.extend_u128(0u128);
796 let result = serializer.finish();
797 assert_eq!(hex::encode(&result), "ffffffffffffffffffffffffffffffff");
798
799 let mut serializer = KeySerializer::new();
800 serializer.extend_u128(1u128);
801 let result = serializer.finish();
802 assert_eq!(hex::encode(&result), "fffffffffffffffffffffffffffffffe");
803
804 let mut serializer = KeySerializer::new();
805 serializer.extend_u128(u128::MAX);
806 let result = serializer.finish();
807 assert_eq!(hex::encode(&result), "00000000000000000000000000000000");
808 }
809
810 #[test]
811 fn test_extend_bytes() {
812 let mut serializer = KeySerializer::new();
813 serializer.extend_bytes(b"hello");
814 let result = serializer.finish();
815 assert_eq!(result, vec![b'h', b'e', b'l', b'l', b'o', 0xff, 0xff]);
817
818 let mut serializer = KeySerializer::new();
820 serializer.extend_bytes(&[0x01, 0xff, 0x02]);
821 let result = serializer.finish();
822 assert_eq!(result, vec![0x01, 0xff, 0x00, 0x02, 0xff, 0xff]);
824 }
825
826 #[test]
827 fn test_extend_str() {
828 let mut serializer = KeySerializer::new();
829 serializer.extend_str("hello world");
830 let result = serializer.finish();
831 assert!(result.len() > "hello world".len());
833 assert!(result.ends_with(&[0xff, 0xff]));
834 }
835
836 #[test]
837 fn test_extend_raw() {
838 let mut serializer = KeySerializer::new();
839 serializer.extend_raw(&[0x01, 0x02, 0x03]);
840 let result = serializer.finish();
841 assert_eq!(result, vec![0x01, 0x02, 0x03]);
842 }
843
844 #[test]
845 fn test_chaining() {
846 let mut serializer = KeySerializer::new();
847 serializer.extend_bool(true).extend_i32(42i32).extend_str("test").extend_u64(1000u64);
848 let result = serializer.finish();
849
850 assert!(result.len() >= 19);
852
853 let mut de = KeyDeserializer::from_bytes(&result);
854 assert_eq!(de.read_bool().unwrap(), true);
855 assert_eq!(de.read_i32().unwrap(), 42);
856 assert_eq!(de.read_str().unwrap(), "test");
857 assert_eq!(de.read_u64().unwrap(), 1000);
858 assert!(de.is_empty());
859 }
860
861 #[test]
862 fn test_ordering_descending_i32() {
863 let mut ser1 = KeySerializer::new();
865 ser1.extend_i32(1i32);
866 let bytes1 = ser1.finish();
867
868 let mut ser2 = KeySerializer::new();
869 ser2.extend_i32(100i32);
870 let bytes2 = ser2.finish();
871
872 let mut ser3 = KeySerializer::new();
873 ser3.extend_i32(1000i32);
874 let bytes3 = ser3.finish();
875
876 assert!(bytes3 < bytes2, "encode(1000) should be < encode(100)");
879 assert!(bytes2 < bytes1, "encode(100) should be < encode(1)");
880 }
881
882 #[test]
883 fn test_ordering_descending_u64() {
884 let mut ser1 = KeySerializer::new();
885 ser1.extend_u64(1u64);
886 let bytes1 = ser1.finish();
887
888 let mut ser2 = KeySerializer::new();
889 ser2.extend_u64(100u64);
890 let bytes2 = ser2.finish();
891
892 let mut ser3 = KeySerializer::new();
893 ser3.extend_u64(10000u64);
894 let bytes3 = ser3.finish();
895
896 assert!(bytes3 < bytes2, "encode(10000) should be < encode(100)");
898 assert!(bytes2 < bytes1, "encode(100) should be < encode(1)");
899 }
900
901 #[test]
902 fn test_ordering_descending_negative() {
903 let mut ser1 = KeySerializer::new();
907 ser1.extend_i32(-1i32);
908 let bytes_neg1 = ser1.finish();
909
910 let mut ser2 = KeySerializer::new();
911 ser2.extend_i32(-100i32);
912 let bytes_neg100 = ser2.finish();
913
914 let mut ser3 = KeySerializer::new();
915 ser3.extend_i32(-1000i32);
916 let bytes_neg1000 = ser3.finish();
917
918 assert!(bytes_neg1 < bytes_neg100, "encode(-1) should be < encode(-100)");
920 assert!(bytes_neg100 < bytes_neg1000, "encode(-100) should be < encode(-1000)");
921 }
922
923 #[test]
924 fn test_ordering_mixed_sign() {
925 let mut ser_neg = KeySerializer::new();
927 ser_neg.extend_i32(-1i32);
928 let bytes_neg = ser_neg.finish();
929
930 let mut ser_zero = KeySerializer::new();
931 ser_zero.extend_i32(0i32);
932 let bytes_zero = ser_zero.finish();
933
934 let mut ser_pos = KeySerializer::new();
935 ser_pos.extend_i32(1i32);
936 let bytes_pos = ser_pos.finish();
937
938 assert!(bytes_pos < bytes_zero, "encode(1) should be < encode(0)");
940 assert!(bytes_zero < bytes_neg, "encode(0) should be < encode(-1)");
941 }
942
943 #[test]
944 fn test_date() {
945 let mut serializer = KeySerializer::new();
946 let date = Date::from_ymd(2024, 1, 1).unwrap();
947 serializer.extend_date(&date);
948 let result = serializer.finish();
949 assert_eq!(result.len(), 4); }
951
952 #[test]
953 fn test_datetime() {
954 let mut serializer = KeySerializer::new();
955 let datetime = DateTime::from_ymd_hms(2024, 1, 1, 12, 0, 0).unwrap();
956 serializer.extend_datetime(&datetime);
957 let result = serializer.finish();
958 assert_eq!(result.len(), 8); }
960
961 #[test]
962 fn test_time() {
963 let mut serializer = KeySerializer::new();
964 let time = Time::from_hms(12, 30, 45).unwrap();
965 serializer.extend_time(&time);
966 let result = serializer.finish();
967 assert_eq!(result.len(), 8); }
969
970 #[test]
971 fn test_interval() {
972 let mut serializer = KeySerializer::new();
973 let duration = Duration::from_nanoseconds(1000000).unwrap();
974 serializer.extend_duration(&duration);
975 let result = serializer.finish();
976 assert_eq!(result.len(), 16); }
978
979 #[test]
980 fn test_row_number() {
981 let mut serializer = KeySerializer::new();
982 let row_number = RowNumber(42);
983 serializer.extend_row_number(&row_number);
984 let result = serializer.finish();
985 assert_eq!(result.len(), 8); }
987
988 #[test]
989 fn test_identity_id() {
990 let (_, clock, rng) = test_clock_and_rng();
991 let mut serializer = KeySerializer::new();
992 let id = IdentityId::generate(&clock, &rng);
993 serializer.extend_identity_id(&id);
994 let result = serializer.finish();
995 assert!(result.len() > 0);
996 }
997
998 #[test]
999 fn test_uuid4() {
1000 let mut serializer = KeySerializer::new();
1001 let uuid = Uuid4::generate();
1002 serializer.extend_uuid4(&uuid);
1003 let result = serializer.finish();
1004 assert!(result.len() > 16);
1006 }
1007
1008 #[test]
1009 fn test_uuid7() {
1010 let (_, clock, rng) = test_clock_and_rng();
1011 let mut serializer = KeySerializer::new();
1012 let uuid = Uuid7::generate(&clock, &rng);
1013 serializer.extend_uuid7(&uuid);
1014 let result = serializer.finish();
1015 assert!(result.len() > 16);
1017 }
1018
1019 #[test]
1020 fn test_blob() {
1021 let mut serializer = KeySerializer::new();
1022 let blob = Blob::from(vec![0x01, 0x02, 0x03]);
1023 serializer.extend_blob(&blob);
1024 let result = serializer.finish();
1025 assert!(result.len() > 3);
1027 }
1028
1029 #[test]
1030 fn test_int() {
1031 let mut serializer = KeySerializer::new();
1032 let int = Int(BigInt::from(42));
1033 serializer.extend_int(&int);
1034 let result = serializer.finish();
1035 assert!(result.len() > 0);
1037 }
1038
1039 #[test]
1040 fn test_uint() {
1041 let mut serializer = KeySerializer::new();
1042 let uint = Uint(BigInt::from(42));
1043 serializer.extend_uint(&uint);
1044 let result = serializer.finish();
1045 assert!(result.len() > 0);
1047 }
1048
1049 #[test]
1050 fn test_decimal() {
1051 let mut serializer = KeySerializer::new();
1052 let decimal = Decimal::from_str("3.14").unwrap();
1053 serializer.extend_decimal(&decimal);
1054 let result = serializer.finish();
1055 assert!(result.len() > 0);
1057 }
1058
1059 #[test]
1060 fn test_extend_value() {
1061 let mut serializer = KeySerializer::new();
1063 serializer.extend_value(&Value::none());
1064 let result = serializer.finish();
1065 assert_eq!(result, vec![0x00, 0x00]); let mut serializer = KeySerializer::new();
1069 serializer.extend_value(&Value::none_of(Type::Int4));
1070 let result = serializer.finish();
1071 assert_eq!(result, vec![0x00, 0x06]); let mut serializer = KeySerializer::new();
1075 serializer.extend_value(&Value::Boolean(true));
1076 let result = serializer.finish();
1077 assert_eq!(result[0], 0x01); assert_eq!(result.len(), 2); let mut serializer = KeySerializer::new();
1082 serializer.extend_value(&Value::Int4(42));
1083 let result = serializer.finish();
1084 assert_eq!(result[0], 0x06); assert_eq!(result.len(), 5); let mut serializer = KeySerializer::new();
1089 serializer.extend_value(&Value::Utf8("test".to_string()));
1090 let result = serializer.finish();
1091 assert_eq!(result[0], 0x09); assert!(result.ends_with(&[0xff, 0xff]));
1093 }
1094
1095 #[test]
1096 fn test_roundtrip_none() {
1097 let value = Value::none();
1098 let mut ser = KeySerializer::new();
1099 ser.extend_value(&value);
1100 let bytes = ser.finish();
1101 let mut de = KeyDeserializer::from_bytes(&bytes);
1102 assert_eq!(de.read_value().unwrap(), value);
1103 assert!(de.is_empty());
1104 }
1105
1106 #[test]
1107 fn test_roundtrip_none_typed() {
1108 let value = Value::none_of(Type::Int4);
1109 let mut ser = KeySerializer::new();
1110 ser.extend_value(&value);
1111 let bytes = ser.finish();
1112 let mut de = KeyDeserializer::from_bytes(&bytes);
1113 assert_eq!(de.read_value().unwrap(), value);
1114 assert!(de.is_empty());
1115 }
1116
1117 #[test]
1118 fn test_roundtrip_boolean_true() {
1119 let value = Value::Boolean(true);
1120 let mut ser = KeySerializer::new();
1121 ser.extend_value(&value);
1122 let bytes = ser.finish();
1123 let mut de = KeyDeserializer::from_bytes(&bytes);
1124 assert_eq!(de.read_value().unwrap(), value);
1125 assert!(de.is_empty());
1126 }
1127
1128 #[test]
1129 fn test_roundtrip_boolean_false() {
1130 let value = Value::Boolean(false);
1131 let mut ser = KeySerializer::new();
1132 ser.extend_value(&value);
1133 let bytes = ser.finish();
1134 let mut de = KeyDeserializer::from_bytes(&bytes);
1135 assert_eq!(de.read_value().unwrap(), value);
1136 assert!(de.is_empty());
1137 }
1138
1139 #[test]
1140 fn test_roundtrip_float4() {
1141 let value = Value::Float4(OrderedF32::try_from(3.14f32).unwrap());
1142 let mut ser = KeySerializer::new();
1143 ser.extend_value(&value);
1144 let bytes = ser.finish();
1145 let mut de = KeyDeserializer::from_bytes(&bytes);
1146 assert_eq!(de.read_value().unwrap(), value);
1147 assert!(de.is_empty());
1148 }
1149
1150 #[test]
1151 fn test_roundtrip_float8() {
1152 let value = Value::Float8(OrderedF64::try_from(3.14).unwrap());
1153 let mut ser = KeySerializer::new();
1154 ser.extend_value(&value);
1155 let bytes = ser.finish();
1156 let mut de = KeyDeserializer::from_bytes(&bytes);
1157 assert_eq!(de.read_value().unwrap(), value);
1158 assert!(de.is_empty());
1159 }
1160
1161 #[test]
1162 fn test_roundtrip_int1() {
1163 let value = Value::Int1(-42);
1164 let mut ser = KeySerializer::new();
1165 ser.extend_value(&value);
1166 let bytes = ser.finish();
1167 let mut de = KeyDeserializer::from_bytes(&bytes);
1168 assert_eq!(de.read_value().unwrap(), value);
1169 assert!(de.is_empty());
1170 }
1171
1172 #[test]
1173 fn test_roundtrip_int2() {
1174 let value = Value::Int2(-1000);
1175 let mut ser = KeySerializer::new();
1176 ser.extend_value(&value);
1177 let bytes = ser.finish();
1178 let mut de = KeyDeserializer::from_bytes(&bytes);
1179 assert_eq!(de.read_value().unwrap(), value);
1180 assert!(de.is_empty());
1181 }
1182
1183 #[test]
1184 fn test_roundtrip_int4() {
1185 let value = Value::Int4(42);
1186 let mut ser = KeySerializer::new();
1187 ser.extend_value(&value);
1188 let bytes = ser.finish();
1189 let mut de = KeyDeserializer::from_bytes(&bytes);
1190 assert_eq!(de.read_value().unwrap(), value);
1191 assert!(de.is_empty());
1192 }
1193
1194 #[test]
1195 fn test_roundtrip_int8() {
1196 let value = Value::Int8(-1_000_000);
1197 let mut ser = KeySerializer::new();
1198 ser.extend_value(&value);
1199 let bytes = ser.finish();
1200 let mut de = KeyDeserializer::from_bytes(&bytes);
1201 assert_eq!(de.read_value().unwrap(), value);
1202 assert!(de.is_empty());
1203 }
1204
1205 #[test]
1206 fn test_roundtrip_int16() {
1207 let value = Value::Int16(123_456_789);
1208 let mut ser = KeySerializer::new();
1209 ser.extend_value(&value);
1210 let bytes = ser.finish();
1211 let mut de = KeyDeserializer::from_bytes(&bytes);
1212 assert_eq!(de.read_value().unwrap(), value);
1213 assert!(de.is_empty());
1214 }
1215
1216 #[test]
1217 fn test_roundtrip_utf8() {
1218 let value = Value::Utf8("hello world".to_string());
1219 let mut ser = KeySerializer::new();
1220 ser.extend_value(&value);
1221 let bytes = ser.finish();
1222 let mut de = KeyDeserializer::from_bytes(&bytes);
1223 assert_eq!(de.read_value().unwrap(), value);
1224 assert!(de.is_empty());
1225 }
1226
1227 #[test]
1228 fn test_roundtrip_uint1() {
1229 let value = Value::Uint1(255);
1230 let mut ser = KeySerializer::new();
1231 ser.extend_value(&value);
1232 let bytes = ser.finish();
1233 let mut de = KeyDeserializer::from_bytes(&bytes);
1234 assert_eq!(de.read_value().unwrap(), value);
1235 assert!(de.is_empty());
1236 }
1237
1238 #[test]
1239 fn test_roundtrip_uint2() {
1240 let value = Value::Uint2(65535);
1241 let mut ser = KeySerializer::new();
1242 ser.extend_value(&value);
1243 let bytes = ser.finish();
1244 let mut de = KeyDeserializer::from_bytes(&bytes);
1245 assert_eq!(de.read_value().unwrap(), value);
1246 assert!(de.is_empty());
1247 }
1248
1249 #[test]
1250 fn test_roundtrip_uint4() {
1251 let value = Value::Uint4(100_000);
1252 let mut ser = KeySerializer::new();
1253 ser.extend_value(&value);
1254 let bytes = ser.finish();
1255 let mut de = KeyDeserializer::from_bytes(&bytes);
1256 assert_eq!(de.read_value().unwrap(), value);
1257 assert!(de.is_empty());
1258 }
1259
1260 #[test]
1261 fn test_roundtrip_uint8() {
1262 let value = Value::Uint8(999);
1263 let mut ser = KeySerializer::new();
1264 ser.extend_value(&value);
1265 let bytes = ser.finish();
1266 let mut de = KeyDeserializer::from_bytes(&bytes);
1267 assert_eq!(de.read_value().unwrap(), value);
1268 assert!(de.is_empty());
1269 }
1270
1271 #[test]
1272 fn test_roundtrip_uint16() {
1273 let value = Value::Uint16(u128::MAX);
1274 let mut ser = KeySerializer::new();
1275 ser.extend_value(&value);
1276 let bytes = ser.finish();
1277 let mut de = KeyDeserializer::from_bytes(&bytes);
1278 assert_eq!(de.read_value().unwrap(), value);
1279 assert!(de.is_empty());
1280 }
1281
1282 #[test]
1283 fn test_roundtrip_date() {
1284 let value = Value::Date(Date::from_ymd(2024, 6, 15).unwrap());
1285 let mut ser = KeySerializer::new();
1286 ser.extend_value(&value);
1287 let bytes = ser.finish();
1288 let mut de = KeyDeserializer::from_bytes(&bytes);
1289 assert_eq!(de.read_value().unwrap(), value);
1290 assert!(de.is_empty());
1291 }
1292
1293 #[test]
1294 fn test_roundtrip_datetime() {
1295 let value = Value::DateTime(DateTime::from_ymd_hms(2024, 6, 15, 12, 30, 45).unwrap());
1296 let mut ser = KeySerializer::new();
1297 ser.extend_value(&value);
1298 let bytes = ser.finish();
1299 let mut de = KeyDeserializer::from_bytes(&bytes);
1300 assert_eq!(de.read_value().unwrap(), value);
1301 assert!(de.is_empty());
1302 }
1303
1304 #[test]
1305 fn test_roundtrip_time() {
1306 let value = Value::Time(Time::from_hms(12, 30, 45).unwrap());
1307 let mut ser = KeySerializer::new();
1308 ser.extend_value(&value);
1309 let bytes = ser.finish();
1310 let mut de = KeyDeserializer::from_bytes(&bytes);
1311 assert_eq!(de.read_value().unwrap(), value);
1312 assert!(de.is_empty());
1313 }
1314
1315 #[test]
1316 fn test_roundtrip_duration() {
1317 let value = Value::Duration(Duration::from_nanoseconds(1_000_000).unwrap());
1318 let mut ser = KeySerializer::new();
1319 ser.extend_value(&value);
1320 let bytes = ser.finish();
1321 let mut de = KeyDeserializer::from_bytes(&bytes);
1322 assert_eq!(de.read_value().unwrap(), value);
1323 assert!(de.is_empty());
1324 }
1325
1326 #[test]
1327 fn test_roundtrip_identity_id() {
1328 let (_, clock, rng) = test_clock_and_rng();
1329 let value = Value::IdentityId(IdentityId::generate(&clock, &rng));
1330 let mut ser = KeySerializer::new();
1331 ser.extend_value(&value);
1332 let bytes = ser.finish();
1333 let mut de = KeyDeserializer::from_bytes(&bytes);
1334 assert_eq!(de.read_value().unwrap(), value);
1335 assert!(de.is_empty());
1336 }
1337
1338 #[test]
1339 fn test_roundtrip_uuid4() {
1340 let value = Value::Uuid4(Uuid4::generate());
1341 let mut ser = KeySerializer::new();
1342 ser.extend_value(&value);
1343 let bytes = ser.finish();
1344 let mut de = KeyDeserializer::from_bytes(&bytes);
1345 assert_eq!(de.read_value().unwrap(), value);
1346 assert!(de.is_empty());
1347 }
1348
1349 #[test]
1350 fn test_roundtrip_uuid7() {
1351 let (_, clock, rng) = test_clock_and_rng();
1352 let value = Value::Uuid7(Uuid7::generate(&clock, &rng));
1353 let mut ser = KeySerializer::new();
1354 ser.extend_value(&value);
1355 let bytes = ser.finish();
1356 let mut de = KeyDeserializer::from_bytes(&bytes);
1357 assert_eq!(de.read_value().unwrap(), value);
1358 assert!(de.is_empty());
1359 }
1360
1361 #[test]
1362 fn test_roundtrip_blob() {
1363 let value = Value::Blob(Blob::from(vec![0x01, 0x02, 0x03]));
1364 let mut ser = KeySerializer::new();
1365 ser.extend_value(&value);
1366 let bytes = ser.finish();
1367 let mut de = KeyDeserializer::from_bytes(&bytes);
1368 assert_eq!(de.read_value().unwrap(), value);
1369 assert!(de.is_empty());
1370 }
1371
1372 #[test]
1373 fn test_roundtrip_int() {
1374 let value = Value::Int(Int(BigInt::from(-42)));
1375 let mut ser = KeySerializer::new();
1376 ser.extend_value(&value);
1377 let bytes = ser.finish();
1378 let mut de = KeyDeserializer::from_bytes(&bytes);
1379 assert_eq!(de.read_value().unwrap(), value);
1380 assert!(de.is_empty());
1381 }
1382
1383 #[test]
1384 fn test_roundtrip_uint() {
1385 let value = Value::Uint(Uint(BigInt::from(42)));
1386 let mut ser = KeySerializer::new();
1387 ser.extend_value(&value);
1388 let bytes = ser.finish();
1389 let mut de = KeyDeserializer::from_bytes(&bytes);
1390 assert_eq!(de.read_value().unwrap(), value);
1391 assert!(de.is_empty());
1392 }
1393
1394 #[test]
1395 fn test_roundtrip_decimal() {
1396 let value = Value::Decimal(Decimal::from_str("3.14").unwrap());
1397 let mut ser = KeySerializer::new();
1398 ser.extend_value(&value);
1399 let bytes = ser.finish();
1400 let mut de = KeyDeserializer::from_bytes(&bytes);
1401 assert_eq!(de.read_value().unwrap(), value);
1402 assert!(de.is_empty());
1403 }
1404
1405 #[test]
1406 fn test_roundtrip_dictionary_id_u1() {
1407 let value = Value::DictionaryId(DictionaryEntryId::U1(42));
1408 let mut ser = KeySerializer::new();
1409 ser.extend_value(&value);
1410 let bytes = ser.finish();
1411 let mut de = KeyDeserializer::from_bytes(&bytes);
1412 assert_eq!(de.read_value().unwrap(), value);
1413 assert!(de.is_empty());
1414 }
1415
1416 #[test]
1417 fn test_roundtrip_dictionary_id_u2() {
1418 let value = Value::DictionaryId(DictionaryEntryId::U2(1000));
1419 let mut ser = KeySerializer::new();
1420 ser.extend_value(&value);
1421 let bytes = ser.finish();
1422 let mut de = KeyDeserializer::from_bytes(&bytes);
1423 assert_eq!(de.read_value().unwrap(), value);
1424 assert!(de.is_empty());
1425 }
1426
1427 #[test]
1428 fn test_roundtrip_dictionary_id_u4() {
1429 let value = Value::DictionaryId(DictionaryEntryId::U4(100_000));
1430 let mut ser = KeySerializer::new();
1431 ser.extend_value(&value);
1432 let bytes = ser.finish();
1433 let mut de = KeyDeserializer::from_bytes(&bytes);
1434 assert_eq!(de.read_value().unwrap(), value);
1435 assert!(de.is_empty());
1436 }
1437
1438 #[test]
1439 fn test_roundtrip_dictionary_id_u8() {
1440 let value = Value::DictionaryId(DictionaryEntryId::U8(10_000_000_000));
1441 let mut ser = KeySerializer::new();
1442 ser.extend_value(&value);
1443 let bytes = ser.finish();
1444 let mut de = KeyDeserializer::from_bytes(&bytes);
1445 assert_eq!(de.read_value().unwrap(), value);
1446 assert!(de.is_empty());
1447 }
1448
1449 #[test]
1450 fn test_roundtrip_dictionary_id_u16() {
1451 let value = Value::DictionaryId(DictionaryEntryId::U16(u128::MAX));
1452 let mut ser = KeySerializer::new();
1453 ser.extend_value(&value);
1454 let bytes = ser.finish();
1455 let mut de = KeyDeserializer::from_bytes(&bytes);
1456 assert_eq!(de.read_value().unwrap(), value);
1457 assert!(de.is_empty());
1458 }
1459
1460 #[test]
1461 fn test_roundtrip_all() {
1462 let (_, clock, rng) = test_clock_and_rng();
1463 let values = vec![
1464 Value::none(),
1465 Value::none_of(Type::Int4),
1466 Value::Boolean(true),
1467 Value::Boolean(false),
1468 Value::Float4(OrderedF32::try_from(3.14f32).unwrap()),
1469 Value::Float8(OrderedF64::try_from(3.14).unwrap()),
1470 Value::Int1(-42),
1471 Value::Int2(-1000),
1472 Value::Int4(42),
1473 Value::Int8(-1_000_000),
1474 Value::Int16(123_456_789),
1475 Value::Utf8("hello world".to_string()),
1476 Value::Uint1(255),
1477 Value::Uint2(65535),
1478 Value::Uint4(100_000),
1479 Value::Uint8(999),
1480 Value::Uint16(u128::MAX),
1481 Value::Date(Date::from_ymd(2024, 6, 15).unwrap()),
1482 Value::DateTime(DateTime::from_ymd_hms(2024, 6, 15, 12, 30, 45).unwrap()),
1483 Value::Time(Time::from_hms(12, 30, 45).unwrap()),
1484 Value::Duration(Duration::from_nanoseconds(1_000_000).unwrap()),
1485 Value::IdentityId(IdentityId::generate(&clock, &rng)),
1486 Value::Uuid4(Uuid4::generate()),
1487 Value::Uuid7(Uuid7::generate(&clock, &rng)),
1488 Value::Blob(Blob::from(vec![0x01, 0x02, 0x03])),
1489 Value::Int(Int(BigInt::from(-42))),
1490 Value::Uint(Uint(BigInt::from(42))),
1491 Value::Decimal(Decimal::from_str("3.14").unwrap()),
1492 Value::DictionaryId(DictionaryEntryId::U8(42)),
1493 ];
1494
1495 let mut ser = KeySerializer::new();
1496 for v in &values {
1497 ser.extend_value(v);
1498 }
1499 let bytes = ser.finish();
1500
1501 let mut de = KeyDeserializer::from_bytes(&bytes);
1502 for expected in &values {
1503 let actual = de.read_value().unwrap();
1504 assert_eq!(&actual, expected);
1505 }
1506 assert!(de.is_empty());
1507 }
1508
1509 #[test]
1513 fn test_roundtrip_exhaustiveness_guard() {
1514 let value = Value::none();
1515 match value {
1516 Value::None {
1517 ..
1518 } => {}
1519 Value::Boolean(_) => {}
1520 Value::Float4(_) => {}
1521 Value::Float8(_) => {}
1522 Value::Int1(_) => {}
1523 Value::Int2(_) => {}
1524 Value::Int4(_) => {}
1525 Value::Int8(_) => {}
1526 Value::Int16(_) => {}
1527 Value::Utf8(_) => {}
1528 Value::Uint1(_) => {}
1529 Value::Uint2(_) => {}
1530 Value::Uint4(_) => {}
1531 Value::Uint8(_) => {}
1532 Value::Uint16(_) => {}
1533 Value::Date(_) => {}
1534 Value::DateTime(_) => {}
1535 Value::Time(_) => {}
1536 Value::Duration(_) => {}
1537 Value::IdentityId(_) => {}
1538 Value::Uuid4(_) => {}
1539 Value::Uuid7(_) => {}
1540 Value::Blob(_) => {}
1541 Value::Int(_) => {}
1542 Value::Uint(_) => {}
1543 Value::Decimal(_) => {}
1544 Value::DictionaryId(_) => {}
1545 Value::Any(_) => {}
1547 Value::Type(_) => {}
1548 Value::List(_) => {}
1549 Value::Record(_) => {}
1550 Value::Tuple(_) => {}
1551 }
1552 }
1553
1554 #[test]
1555 fn test_to_encoded_key() {
1556 let mut serializer = KeySerializer::new();
1557 serializer.extend_i32(42);
1558 let key = serializer.to_encoded_key();
1559 assert_eq!(key.len(), 4);
1560 }
1561
1562 #[test]
1563 fn test_index_id() {
1564 let mut serializer = KeySerializer::new();
1565 serializer.extend_index_id(IndexId::Primary(PrimaryKeyId(123456789)));
1566 let result = serializer.finish();
1567
1568 assert_eq!(result.len(), 9);
1570 assert_eq!(result[0], 0x01); let mut serializer2 = KeySerializer::new();
1574 serializer2.extend_index_id(IndexId::Primary(PrimaryKeyId(1)));
1575 let result2 = serializer2.finish();
1576
1577 assert!(result2[1..] > result[1..]);
1580 }
1581
1582 #[test]
1583 fn test_object_id() {
1584 let mut serializer = KeySerializer::new();
1585 serializer.extend_shape_id(ShapeId::Table(TableId(987654321)));
1586 let result = serializer.finish();
1587
1588 assert_eq!(result.len(), 9);
1590 assert_eq!(result[0], 0x01); let mut serializer2 = KeySerializer::new();
1594 serializer2.extend_shape_id(ShapeId::Table(TableId(987654322)));
1595 let result2 = serializer2.finish();
1596
1597 assert!(result2[1..] < result[1..]);
1600 }
1601}