1use crate::{int::I256, uint::U256};
37use core::{
38 fmt::{self, Display, Formatter, Write},
39 mem::MaybeUninit,
40 ptr, slice, str,
41};
42use serde::{
43 de::{self, Visitor},
44 Deserialize, Deserializer, Serialize, Serializer,
45};
46
47impl Serialize for I256 {
48 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
49 where
50 S: Serializer,
51 {
52 let mut f = FormatBuffer::hex();
53 write!(f, "{self:-#x}").expect("unexpected formatting failure");
54 serializer.serialize_str(f.as_str())
55 }
56}
57
58impl Serialize for U256 {
59 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
60 where
61 S: Serializer,
62 {
63 let mut f = FormatBuffer::hex();
64 write!(f, "{self:#x}").expect("unexpected formatting failure");
65 serializer.serialize_str(f.as_str())
66 }
67}
68
69impl<'de> Deserialize<'de> for I256 {
70 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
71 where
72 D: Deserializer<'de>,
73 {
74 deserializer.deserialize_str(FormatVisitor(Self::from_str_hex))
75 }
76}
77
78impl<'de> Deserialize<'de> for U256 {
79 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
80 where
81 D: Deserializer<'de>,
82 {
83 deserializer.deserialize_str(FormatVisitor(Self::from_str_hex))
84 }
85}
86
87pub mod decimal {
90 use super::*;
91 use core::num::ParseIntError;
92
93 #[doc(hidden)]
94 pub trait Decimal: Sized {
95 fn from_str_decimal(src: &str) -> Result<Self, ParseIntError>;
96 fn write_decimal(&self, f: &mut impl Write);
97 }
98
99 impl Decimal for I256 {
100 fn from_str_decimal(src: &str) -> Result<Self, ParseIntError> {
101 Self::from_str_radix(src, 10)
102 }
103 fn write_decimal(&self, f: &mut impl Write) {
104 write!(f, "{self}").expect("unexpected formatting error")
105 }
106 }
107
108 impl Decimal for U256 {
109 fn from_str_decimal(src: &str) -> Result<Self, ParseIntError> {
110 Self::from_str_radix(src, 10)
111 }
112 fn write_decimal(&self, f: &mut impl Write) {
113 write!(f, "{self}").expect("unexpected formatting error")
114 }
115 }
116
117 #[doc(hidden)]
118 pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
119 where
120 T: Decimal,
121 S: Serializer,
122 {
123 let mut f = FormatBuffer::decimal();
124 value.write_decimal(&mut f);
125 serializer.serialize_str(f.as_str())
126 }
127
128 #[doc(hidden)]
129 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
130 where
131 T: Decimal,
132 D: Deserializer<'de>,
133 {
134 deserializer.deserialize_str(FormatVisitor(T::from_str_decimal))
135 }
136}
137
138pub mod prefixed {
144 use super::*;
145 use core::num::ParseIntError;
146
147 #[doc(hidden)]
148 pub trait Prefixed: Serialize + Sized {
149 fn from_str_prefixed(src: &str) -> Result<Self, ParseIntError>;
150 }
151
152 impl Prefixed for I256 {
153 fn from_str_prefixed(src: &str) -> Result<Self, ParseIntError> {
154 Self::from_str_prefixed(src)
155 }
156 }
157
158 impl Prefixed for U256 {
159 fn from_str_prefixed(src: &str) -> Result<Self, ParseIntError> {
160 Self::from_str_prefixed(src)
161 }
162 }
163
164 #[doc(hidden)]
165 pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
166 where
167 T: Prefixed,
168 S: Serializer,
169 {
170 value.serialize(serializer)
171 }
172
173 #[doc(hidden)]
174 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
175 where
176 T: Prefixed,
177 D: Deserializer<'de>,
178 {
179 deserializer.deserialize_str(FormatVisitor(T::from_str_prefixed))
180 }
181}
182
183pub mod permissive {
189 use super::{prefixed::Prefixed, FormatVisitor};
190 use crate::{AsI256 as _, I256, U256};
191 use core::fmt::{self, Formatter};
192 use core::marker::PhantomData;
193 use serde::{
194 de::{self, Deserializer, Visitor},
195 Serializer,
196 };
197
198 #[doc(hidden)]
199 pub trait Permissive: Prefixed {
200 fn cast(value: I256) -> Self;
201 }
202
203 impl Permissive for I256 {
204 fn cast(value: I256) -> Self {
205 value
206 }
207 }
208
209 impl Permissive for U256 {
210 fn cast(value: I256) -> Self {
211 value.as_u256()
212 }
213 }
214
215 #[doc(hidden)]
216 pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
217 where
218 T: Permissive,
219 S: Serializer,
220 {
221 value.serialize(serializer)
222 }
223
224 struct PermissiveVisitor<T>(PhantomData<T>);
225
226 impl<T> Visitor<'_> for PermissiveVisitor<T>
227 where
228 T: Permissive,
229 {
230 type Value = T;
231
232 fn expecting(&self, f: &mut Formatter) -> fmt::Result {
233 f.write_str("number, decimal string or '0x-' prefixed hexadecimal string")
234 }
235
236 fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E>
237 where
238 E: de::Error,
239 {
240 Ok(T::cast(v.as_i256()))
241 }
242
243 fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
244 where
245 E: de::Error,
246 {
247 Ok(T::cast(v.as_i256()))
248 }
249
250 fn visit_i128<E>(self, v: i128) -> Result<Self::Value, E>
251 where
252 E: de::Error,
253 {
254 Ok(T::cast(v.as_i256()))
255 }
256
257 fn visit_u128<E>(self, v: u128) -> Result<Self::Value, E>
258 where
259 E: de::Error,
260 {
261 Ok(T::cast(v.as_i256()))
262 }
263
264 fn visit_f32<E>(self, v: f32) -> Result<Self::Value, E>
265 where
266 E: de::Error,
267 {
268 const N: f32 = (1_u64 << 24) as _;
269 if !(-N..N).contains(&v) {
270 return Err(de::Error::custom(
271 "invalid conversion from single precision floating point \
272 number outside of valid integer range (-2^24, 2^24)",
273 ));
274 }
275
276 self.visit_f64(v as _)
277 }
278
279 fn visit_f64<E>(self, v: f64) -> Result<Self::Value, E>
280 where
281 E: de::Error,
282 {
283 const N: f64 = (1_u64 << 53) as _;
284 if !(-N..N).contains(&v) {
285 return Err(de::Error::custom(
286 "invalid conversion from double precision floating point \
287 number outside of valid integer range (-2^53, 2^53)",
288 ));
289 }
290
291 let i = v as i64;
295 if i as f64 != v {
296 return Err(de::Error::custom(
297 "invalid conversion from floating point number \
298 with fractional part to 256-bit integer",
299 ));
300 }
301
302 Ok(T::cast(i.as_i256()))
303 }
304
305 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
306 where
307 E: de::Error,
308 {
309 FormatVisitor(T::from_str_prefixed).visit_str(v)
310 }
311 }
312
313 #[doc(hidden)]
314 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
315 where
316 T: Permissive,
317 D: Deserializer<'de>,
318 {
319 deserializer.deserialize_any(PermissiveVisitor(PhantomData))
320 }
321}
322
323pub mod bytes {
325 macro_rules! endianness {
326 ($name:literal; $to:ident, $from:ident) => {
327 use crate::{I256, U256};
328 use core::{
329 fmt::{self, Formatter},
330 marker::PhantomData,
331 mem::{self, MaybeUninit},
332 };
333 use serde::{
334 de::{self, Deserializer, Visitor},
335 Serializer,
336 };
337
338 #[doc(hidden)]
339 pub trait Bytes: Sized + Copy {
340 fn to_bytes(self) -> [u8; 32];
341 fn from_bytes(bytes: [u8; 32]) -> Self;
342 }
343
344 impl Bytes for I256 {
345 fn to_bytes(self) -> [u8; 32] {
346 self.$to()
347 }
348
349 fn from_bytes(bytes: [u8; 32]) -> Self {
350 I256::$from(bytes)
351 }
352 }
353
354 impl Bytes for U256 {
355 fn to_bytes(self) -> [u8; 32] {
356 self.$to()
357 }
358
359 fn from_bytes(bytes: [u8; 32]) -> Self {
360 U256::$from(bytes)
361 }
362 }
363
364 #[doc(hidden)]
365 pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
366 where
367 T: Bytes,
368 S: Serializer,
369 {
370 let bytes = value.to_bytes();
371 serializer.serialize_bytes(&bytes)
372 }
373
374 struct BytesVisitor<T>(PhantomData<T>);
375
376 impl<'de, T> Visitor<'de> for BytesVisitor<T>
377 where
378 T: Bytes,
379 {
380 type Value = T;
381
382 fn expecting(&self, f: &mut Formatter) -> fmt::Result {
383 f.write_str(concat!("32 bytes in ", $name, " endian"))
384 }
385
386 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
387 where
388 E: de::Error,
389 {
390 let bytes = v
391 .try_into()
392 .map_err(|_| E::invalid_length(v.len(), &self))?;
393
394 Ok(T::from_bytes(bytes))
395 }
396
397 fn visit_seq<S>(self, mut seq: S) -> Result<Self::Value, S::Error>
398 where
399 S: de::SeqAccess<'de>,
400 {
401 match seq.size_hint() {
402 Some(len) if len != 32 => {
403 return Err(de::Error::invalid_length(len, &self))
404 }
405 _ => {}
406 }
407
408 let mut bytes = [MaybeUninit::<u8>::uninit(); 32];
409 for i in 0..32 {
410 bytes[i].write(
411 seq.next_element()?
412 .ok_or(de::Error::invalid_length(i, &self))?,
413 );
414 }
415 if seq.next_element::<u8>()?.is_some() {
416 return Err(de::Error::invalid_length(33, &self));
417 }
418
419 let bytes = unsafe { mem::transmute::<[MaybeUninit<u8>; 32], [u8; 32]>(bytes) };
421
422 Ok(T::from_bytes(bytes))
423 }
424 }
425
426 #[doc(hidden)]
427 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
428 where
429 T: Bytes,
430 D: Deserializer<'de>,
431 {
432 deserializer.deserialize_bytes(BytesVisitor(PhantomData))
433 }
434 };
435 }
436
437 pub mod le {
440 endianness!("little"; to_le_bytes, from_le_bytes);
441 }
442
443 pub mod be {
446 endianness!("big"; to_be_bytes, from_be_bytes);
447 }
448
449 pub mod ne {
452 #[cfg(target_endian = "little")]
453 #[doc(hidden)]
454 pub use super::le::{deserialize, serialize};
455
456 #[cfg(target_endian = "big")]
457 #[doc(hidden)]
458 pub use super::be::{deserialize, serialize};
459 }
460}
461
462pub mod compressed_bytes {
464 use crate::{I256, U256};
465
466 #[doc(hidden)]
467 pub trait CompressedBytes {
468 fn leading_bits(&self) -> u32;
469 fn extend(msb: u8) -> u8;
470 }
471
472 impl CompressedBytes for I256 {
473 fn leading_bits(&self) -> u32 {
474 match self.is_negative() {
475 true => self.leading_ones() - 1,
476 false => self.leading_zeros(),
477 }
478 }
479
480 fn extend(msb: u8) -> u8 {
481 ((msb as i8) >> 7) as _
482 }
483 }
484
485 impl CompressedBytes for U256 {
486 fn leading_bits(&self) -> u32 {
487 self.leading_zeros()
488 }
489
490 fn extend(_: u8) -> u8 {
491 0
492 }
493 }
494
495 macro_rules! endianness {
496 ($name:literal; $parent:ident, |$tb:ident| $to:block, |$fb:ident| $from:block) => {
497 use super::CompressedBytes;
498 use crate::serde::bytes::$parent::Bytes;
499 use core::{
500 fmt::{self, Formatter},
501 marker::PhantomData,
502 mem::MaybeUninit,
503 };
504 use serde::{
505 de::{self, Deserializer, Visitor},
506 Serializer,
507 };
508
509 #[doc(hidden)]
510 pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
511 where
512 T: Bytes + CompressedBytes,
513 S: Serializer,
514 {
515 let bytes = value.to_bytes();
516 let $tb = (value.leading_bits() as usize) / 8;
517 let index = { $to };
518 serializer.serialize_bytes(&bytes[index])
519 }
520
521 struct CompressedBytesVisitor<T>(PhantomData<T>);
522
523 impl<'de, T> Visitor<'de> for CompressedBytesVisitor<T>
524 where
525 T: Bytes + CompressedBytes,
526 {
527 type Value = T;
528
529 fn expecting(&self, f: &mut Formatter) -> fmt::Result {
530 f.write_str(concat!("bytes in ", $name, " endian"))
531 }
532
533 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E>
534 where
535 E: de::Error,
536 {
537 if v.len() > 32 {
538 return Err(E::invalid_length(v.len(), &self));
539 }
540
541 let extend = T::extend(v.last().copied().unwrap_or_default());
542 let mut bytes = [extend; 32];
543 let $fb = v.len();
544 let index = { $from };
545 bytes[index].copy_from_slice(v);
546
547 Ok(T::from_bytes(bytes))
548 }
549
550 fn visit_seq<S>(self, mut seq: S) -> Result<Self::Value, S::Error>
551 where
552 S: de::SeqAccess<'de>,
553 {
554 match seq.size_hint() {
555 Some(len) if len > 32 => return Err(de::Error::invalid_length(len, &self)),
556 _ => {}
557 }
558
559 let mut bytes = [MaybeUninit::<u8>::uninit(); 32];
560 let mut i = 0;
561 while i < 32 {
562 let b = match seq.next_element()? {
563 Some(b) => b,
564 None => break,
565 };
566 bytes[i].write(b);
567 i += 1;
568 }
569 if i == 32 && seq.next_element::<u8>()?.is_some() {
570 return Err(de::Error::invalid_length(33, &self));
571 }
572
573 let bytes = unsafe { &*(&bytes[..i] as *const _ as *const _) };
576
577 self.visit_bytes(bytes)
578 }
579 }
580
581 #[doc(hidden)]
582 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
583 where
584 T: Bytes + CompressedBytes,
585 D: Deserializer<'de>,
586 {
587 deserializer.deserialize_bytes(CompressedBytesVisitor(PhantomData))
588 }
589 };
590 }
591
592 pub mod le {
597 endianness!("little"; le, |l| { ..32 - l }, |l| { ..l });
598 }
599
600 pub mod be {
605 endianness!("big"; be, |l| { l.. }, |l| { 32 - l.. });
606 }
607
608 pub mod ne {
613 #[cfg(target_endian = "little")]
614 #[doc(hidden)]
615 pub use super::le::{deserialize, serialize};
616
617 #[cfg(target_endian = "big")]
618 #[doc(hidden)]
619 pub use super::be::{deserialize, serialize};
620 }
621}
622
623struct FormatVisitor<F>(F);
626
627impl<T, E, F> Visitor<'_> for FormatVisitor<F>
628where
629 E: Display,
630 F: FnOnce(&str) -> Result<T, E>,
631{
632 type Value = T;
633
634 fn expecting(&self, f: &mut Formatter) -> fmt::Result {
635 f.write_str("a formatted 256-bit integer")
636 }
637
638 fn visit_str<E_>(self, v: &str) -> Result<Self::Value, E_>
639 where
640 E_: de::Error,
641 {
642 self.0(v).map_err(de::Error::custom)
643 }
644
645 fn visit_bytes<E_>(self, v: &[u8]) -> Result<Self::Value, E_>
646 where
647 E_: de::Error,
648 {
649 let string = str::from_utf8(v)
650 .map_err(|_| de::Error::invalid_value(de::Unexpected::Bytes(v), &self))?;
651 self.visit_str(string)
652 }
653}
654
655struct FormatBuffer<const N: usize> {
660 offset: usize,
661 buffer: [MaybeUninit<u8>; N],
662}
663
664impl<const N: usize> FormatBuffer<N> {
665 fn new() -> Self {
667 Self {
668 offset: 0,
669 buffer: [MaybeUninit::uninit(); N],
670 }
671 }
672
673 fn as_str(&self) -> &str {
675 unsafe {
678 let buffer = slice::from_raw_parts(self.buffer[0].as_ptr(), self.offset);
679 str::from_utf8_unchecked(buffer)
680 }
681 }
682}
683
684impl FormatBuffer<78> {
685 fn decimal() -> Self {
688 Self::new()
689 }
690}
691
692impl FormatBuffer<67> {
693 fn hex() -> Self {
696 Self::new()
697 }
698}
699
700impl<const N: usize> Write for FormatBuffer<N> {
701 fn write_str(&mut self, s: &str) -> fmt::Result {
702 let end = self.offset.checked_add(s.len()).ok_or(fmt::Error)?;
703
704 if end > N {
706 return Err(fmt::Error);
707 }
708
709 unsafe {
715 let buffer = self.buffer[0].as_mut_ptr().add(self.offset);
716 ptr::copy_nonoverlapping(s.as_ptr(), buffer, s.len());
717 }
718 self.offset = end;
719
720 Ok(())
721 }
722}
723
724#[cfg(test)]
725mod tests {
726 use super::*;
727 use alloc::{
728 boxed::Box,
729 fmt::{Display, LowerHex},
730 format,
731 string::String,
732 vec,
733 vec::Vec,
734 };
735 use serde::{
736 de::{value, IntoDeserializer},
737 ser::Impossible,
738 };
739
740 #[test]
741 fn serialize_integers() {
742 macro_rules! ser {
743 ($method:expr, $value:expr) => {{
744 let value = $value;
745 ($method)(&value, StringSerializer).unwrap()
746 }};
747 }
748
749 macro_rules! bin_ser {
750 ($method:expr, $value:expr) => {{
751 let value = $value;
752 ($method)(&value, BytesSerializer).unwrap()
753 }};
754 }
755
756 assert_eq!(
757 ser!(I256::serialize, I256::MIN),
758 "-0x8000000000000000000000000000000000000000000000000000000000000000",
759 );
760 assert_eq!(ser!(I256::serialize, I256::new(-1)), "-0x1");
761 assert_eq!(ser!(I256::serialize, I256::new(0)), "0x0");
762 assert_eq!(ser!(I256::serialize, I256::new(42)), "0x2a");
763
764 assert_eq!(ser!(U256::serialize, U256::new(0)), "0x0");
765 assert_eq!(ser!(U256::serialize, U256::new(4919)), "0x1337");
766 assert_eq!(
767 ser!(U256::serialize, U256::MAX),
768 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
769 );
770
771 assert_eq!(
772 ser!(decimal::serialize, I256::MIN),
773 "-57896044618658097711785492504343953926634992332820282019728792003956564819968",
774 );
775 assert_eq!(ser!(decimal::serialize, I256::new(-1)), "-1");
776 assert_eq!(ser!(decimal::serialize, I256::new(0)), "0");
777 assert_eq!(ser!(decimal::serialize, I256::new(42)), "42");
778
779 assert_eq!(ser!(decimal::serialize, U256::new(0)), "0");
780 assert_eq!(ser!(decimal::serialize, U256::new(4919)), "4919");
781 assert_eq!(
782 ser!(decimal::serialize, U256::MAX),
783 "115792089237316195423570985008687907853269984665640564039457584007913129639935",
784 );
785
786 assert_eq!(ser!(prefixed::serialize, I256::new(42)), "0x2a");
787 assert_eq!(ser!(permissive::serialize, I256::new(42)), "0x2a");
788
789 assert_eq!(bin_ser!(bytes::le::serialize, U256::ZERO), vec![0x00; 32]);
790 assert_eq!(bin_ser!(bytes::le::serialize, U256::MAX), vec![0xff; 32]);
791 assert_eq!(bin_ser!(bytes::le::serialize, U256::new(0x4215)), {
792 let mut v = vec![0x15, 0x42];
793 v.resize(32, 0x00);
794 v
795 });
796
797 assert_eq!(
798 bin_ser!(bytes::le::serialize, I256::new(-1)),
799 vec![0xff; 32]
800 );
801 assert_eq!(bin_ser!(bytes::le::serialize, I256::new(-424242)), {
802 let mut v = vec![0xce, 0x86, 0xf9];
803 v.resize(32, 0xff);
804 v
805 });
806
807 assert_eq!(bin_ser!(bytes::be::serialize, U256::ZERO), vec![0x00; 32]);
808 assert_eq!(bin_ser!(bytes::be::serialize, U256::MAX), vec![0xff; 32]);
809 assert_eq!(bin_ser!(bytes::be::serialize, U256::new(0x4215)), {
810 let mut v = vec![0x00; 32];
811 v[30..].copy_from_slice(&[0x42, 0x15]);
812 v
813 });
814
815 assert_eq!(
816 bin_ser!(bytes::be::serialize, I256::new(-1)),
817 vec![0xff; 32]
818 );
819 assert_eq!(bin_ser!(bytes::be::serialize, I256::new(-424242)), {
820 let mut v = vec![0xff; 32];
821 v[29..].copy_from_slice(&[0xf9, 0x86, 0xce]);
822 v
823 });
824
825 assert_eq!(
826 bin_ser!(compressed_bytes::le::serialize, U256::ZERO),
827 vec![]
828 );
829 assert_eq!(
830 bin_ser!(compressed_bytes::le::serialize, U256::MAX),
831 vec![0xff; 32],
832 );
833 assert_eq!(
834 bin_ser!(compressed_bytes::le::serialize, U256::new(0x4215)),
835 vec![0x15, 0x42],
836 );
837
838 assert_eq!(bin_ser!(compressed_bytes::le::serialize, I256::MIN), {
839 let mut v = vec![0; 32];
840 v[31] = 0x80;
841 v
842 });
843 assert_eq!(
844 bin_ser!(compressed_bytes::le::serialize, I256::ZERO),
845 vec![]
846 );
847 assert_eq!(
848 bin_ser!(compressed_bytes::le::serialize, I256::new(-1)),
849 vec![0xff],
850 );
851 assert_eq!(
852 bin_ser!(compressed_bytes::le::serialize, I256::new(-0x8000)),
853 vec![0x00, 0x80],
854 );
855 assert_eq!(
856 bin_ser!(compressed_bytes::le::serialize, I256::new(-424242)),
857 vec![0xce, 0x86, 0xf9],
858 );
859
860 assert_eq!(
861 bin_ser!(compressed_bytes::be::serialize, U256::ZERO),
862 vec![]
863 );
864 assert_eq!(
865 bin_ser!(compressed_bytes::be::serialize, U256::MAX),
866 vec![0xff; 32],
867 );
868 assert_eq!(
869 bin_ser!(compressed_bytes::be::serialize, U256::new(0x4215)),
870 vec![0x42, 0x15],
871 );
872
873 assert_eq!(bin_ser!(compressed_bytes::be::serialize, I256::MIN), {
874 let mut v = vec![0; 32];
875 v[0] = 0x80;
876 v
877 });
878 assert_eq!(
879 bin_ser!(compressed_bytes::be::serialize, I256::ZERO),
880 vec![]
881 );
882 assert_eq!(
883 bin_ser!(compressed_bytes::be::serialize, I256::new(-1)),
884 vec![0xff],
885 );
886 assert_eq!(
887 bin_ser!(compressed_bytes::be::serialize, I256::new(-0x8000)),
888 vec![0x80, 0x00],
889 );
890 assert_eq!(
891 bin_ser!(compressed_bytes::be::serialize, I256::new(-424242)),
892 vec![0xf9, 0x86, 0xce],
893 );
894 }
895
896 #[test]
897 fn deserialize_integers() {
898 macro_rules! de {
899 ($method:expr, $src:expr) => {{
900 let deserializer = IntoDeserializer::<value::Error>::into_deserializer($src);
901 ($method)(deserializer).unwrap()
902 }};
903 (err; $method:expr, $src:expr) => {{
904 let deserializer = IntoDeserializer::<value::Error>::into_deserializer($src);
905 ($method)(deserializer).is_err()
906 }};
907 }
908
909 macro_rules! assert_de_bytes {
910 ($method:expr, $src:expr; eq: $exp:expr) => {{
911 let src = $src;
912 let exp = $exp;
913
914 assert_eq!(de!($method, src.as_slice()), exp);
915
916 let seq =
917 value::SeqDeserializer::<_, value::Error>::new(src.into_iter());
918 assert_eq!(($method)(seq).unwrap(), exp);
919 }};
920 ($method:expr, $src:expr; err) => {{
921 let src = $src;
922 assert!(de!(err; $method, src.as_slice()));
923 let seq =
924 value::SeqDeserializer::<_, value::Error>::new(src.into_iter());
925 assert!(($method)(seq).is_err());
926 }};
927 }
928
929 assert_eq!(
930 de!(
931 I256::deserialize,
932 "-0x8000000000000000000000000000000000000000000000000000000000000000"
933 ),
934 I256::MIN
935 );
936 assert_eq!(de!(I256::deserialize, "-0x1337"), I256::new(-4919));
937 assert_eq!(de!(I256::deserialize, "0x0"), I256::new(0));
938 assert_eq!(de!(I256::deserialize, "0x2a"), I256::new(42));
939 assert_eq!(de!(I256::deserialize, "0x2A"), I256::new(42));
940
941 assert_eq!(de!(U256::deserialize, "0x0"), U256::new(0));
942 assert_eq!(de!(U256::deserialize, "0x2a"), U256::new(42));
943 assert_eq!(de!(U256::deserialize, "0x2A"), U256::new(42));
944 assert_eq!(
945 de!(
946 U256::deserialize,
947 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
948 ),
949 U256::MAX
950 );
951
952 assert_eq!(
953 de!(
954 decimal::deserialize::<I256, _>,
955 "-57896044618658097711785492504343953926634992332820282019728792003956564819968"
956 ),
957 I256::MIN
958 );
959 assert_eq!(de!(decimal::deserialize::<I256, _>, "-1"), I256::new(-1));
960 assert_eq!(de!(decimal::deserialize::<I256, _>, "0"), I256::new(0));
961 assert_eq!(de!(decimal::deserialize::<I256, _>, "42"), I256::new(42));
962
963 assert_eq!(de!(decimal::deserialize::<U256, _>, "0"), U256::new(0));
964 assert_eq!(de!(decimal::deserialize::<U256, _>, "42"), U256::new(42));
965 assert_eq!(
966 de!(
967 decimal::deserialize::<U256, _>,
968 "115792089237316195423570985008687907853269984665640564039457584007913129639935"
969 ),
970 U256::MAX
971 );
972
973 assert_eq!(de!(prefixed::deserialize::<I256, _>, "-1"), I256::new(-1));
974 assert_eq!(de!(prefixed::deserialize::<I256, _>, "-0x1"), I256::new(-1));
975 assert_eq!(de!(prefixed::deserialize::<I256, _>, "42"), I256::new(42));
976 assert_eq!(de!(prefixed::deserialize::<I256, _>, "0x2a"), I256::new(42));
977 assert_eq!(de!(prefixed::deserialize::<I256, _>, "0x2A"), I256::new(42));
978
979 assert_eq!(de!(prefixed::deserialize::<U256, _>, "42"), U256::new(42));
980 assert_eq!(de!(prefixed::deserialize::<U256, _>, "0x2a"), U256::new(42));
981 assert_eq!(de!(prefixed::deserialize::<U256, _>, "0x2A"), U256::new(42));
982
983 assert_eq!(
984 de!(permissive::deserialize::<I256, _>, -42_i64),
985 I256::new(-42)
986 );
987 assert_eq!(
988 de!(permissive::deserialize::<I256, _>, 42_u64),
989 I256::new(42)
990 );
991 assert_eq!(
992 de!(permissive::deserialize::<I256, _>, -1337_i128),
993 I256::new(-1337)
994 );
995 assert_eq!(
996 de!(permissive::deserialize::<I256, _>, 1337_u128),
997 I256::new(1337)
998 );
999 assert_eq!(
1000 de!(permissive::deserialize::<I256, _>, 100.0_f32),
1001 I256::new(100)
1002 );
1003 assert_eq!(
1004 de!(permissive::deserialize::<I256, _>, -100.0_f64),
1005 I256::new(-100)
1006 );
1007 assert_eq!(de!(permissive::deserialize::<I256, _>, "-1"), I256::new(-1));
1008 assert_eq!(
1009 de!(permissive::deserialize::<I256, _>, "1000"),
1010 I256::new(1000)
1011 );
1012 assert_eq!(
1013 de!(permissive::deserialize::<I256, _>, "0x42"),
1014 I256::new(0x42)
1015 );
1016 assert_eq!(
1017 de!(permissive::deserialize::<I256, _>, "-0x2a"),
1018 I256::new(-42)
1019 );
1020 assert_eq!(
1021 de!(
1022 permissive::deserialize::<I256, _>,
1023 "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
1024 ),
1025 I256::MAX
1026 );
1027 assert_eq!(
1028 de!(
1029 permissive::deserialize::<I256, _>,
1030 "-0x8000000000000000000000000000000000000000000000000000000000000000"
1031 ),
1032 I256::MIN
1033 );
1034
1035 assert_eq!(
1036 de!(permissive::deserialize::<U256, _>, 42_u64),
1037 U256::new(42)
1038 );
1039 assert_eq!(
1040 de!(permissive::deserialize::<U256, _>, 1337_u128),
1041 U256::new(1337)
1042 );
1043 assert_eq!(
1044 de!(permissive::deserialize::<U256, _>, 100.0_f32),
1045 U256::new(100)
1046 );
1047 assert_eq!(
1048 de!(permissive::deserialize::<U256, _>, 100.0_f64),
1049 U256::new(100)
1050 );
1051 assert_eq!(
1052 de!(permissive::deserialize::<U256, _>, "1000"),
1053 U256::new(1000)
1054 );
1055 assert_eq!(
1056 de!(permissive::deserialize::<U256, _>, "0x42"),
1057 U256::new(0x42)
1058 );
1059 assert_eq!(
1060 de!(
1061 permissive::deserialize::<U256, _>,
1062 "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
1063 ),
1064 U256::MAX
1065 );
1066
1067 assert!(de!(err; permissive::deserialize::<I256, _>, 4.2_f32));
1068 assert!(de!(err; permissive::deserialize::<I256, _>, 16777216.0_f32));
1069 assert!(de!(err; permissive::deserialize::<I256, _>, -13.37_f64));
1070 assert!(de!(err; permissive::deserialize::<I256, _>, 9007199254740992.0_f32));
1071 assert!(
1072 de!(err; permissive::deserialize::<I256, _>, "0x8000000000000000000000000000000000000000000000000000000000000000")
1073 );
1074 assert!(
1075 de!(err; permissive::deserialize::<I256, _>, "-0x8000000000000000000000000000000000000000000000000000000000000001"
1076 )
1077 );
1078
1079 assert!(de!(err; permissive::deserialize::<U256, _>, 4.2_f32));
1080 assert!(de!(err; permissive::deserialize::<U256, _>, 16777216.0_f32));
1081 assert!(de!(err; permissive::deserialize::<U256, _>, 13.37_f64));
1082 assert!(de!(err; permissive::deserialize::<U256, _>, 9007199254740992.0_f32));
1083 assert!(
1084 de!(err; permissive::deserialize::<U256, _>, "0x10000000000000000000000000000000000000000000000000000000000000000")
1085 );
1086
1087 assert_de_bytes!(
1088 bytes::le::deserialize::<U256, _>, [0x00; 32];
1089 eq: U256::ZERO
1090 );
1091 assert_de_bytes!(
1092 bytes::le::deserialize::<U256, _>, [0xff; 32];
1093 eq: U256::MAX
1094 );
1095
1096 assert_de_bytes!(
1097 bytes::le::deserialize::<I256, _>, [0x00; 32];
1098 eq: I256::ZERO
1099 );
1100 assert_de_bytes!(
1101 bytes::le::deserialize::<I256, _>, [0xff; 32];
1102 eq: I256::new(-1)
1103 );
1104
1105 let forty_two = {
1106 let mut v = [0x00; 32];
1107 v[0] = 0x2a;
1108 v
1109 };
1110 assert_de_bytes!(
1111 bytes::le::deserialize::<U256, _>, forty_two;
1112 eq: U256::new(42)
1113 );
1114 assert_de_bytes!(
1115 bytes::le::deserialize::<I256, _>, forty_two;
1116 eq: I256::new(42)
1117 );
1118
1119 assert_de_bytes!(
1120 bytes::le::deserialize::<U256, _>, [0xff; 31];
1121 err
1122 );
1123 assert_de_bytes!(
1124 bytes::le::deserialize::<U256, _>, [0xff; 33];
1125 err
1126 );
1127 assert_de_bytes!(
1128 bytes::le::deserialize::<I256, _>, [0xff; 31];
1129 err
1130 );
1131 assert_de_bytes!(
1132 bytes::le::deserialize::<I256, _>, [0xff; 33];
1133 err
1134 );
1135
1136 assert_de_bytes!(
1137 bytes::be::deserialize::<U256, _>, [0x00; 32];
1138 eq: U256::ZERO
1139 );
1140 assert_de_bytes!(
1141 bytes::be::deserialize::<U256, _>, [0xff; 32];
1142 eq: U256::MAX
1143 );
1144
1145 assert_de_bytes!(
1146 bytes::be::deserialize::<I256, _>, [0x00; 32];
1147 eq: I256::ZERO
1148 );
1149 assert_de_bytes!(
1150 bytes::be::deserialize::<I256, _>, [0xff; 32];
1151 eq: I256::new(-1)
1152 );
1153
1154 let forty_two = {
1155 let mut v = [0x00; 32];
1156 v[31] = 0x2a;
1157 v
1158 };
1159 assert_de_bytes!(
1160 bytes::be::deserialize::<U256, _>, forty_two;
1161 eq: U256::new(42)
1162 );
1163 assert_de_bytes!(
1164 bytes::be::deserialize::<I256, _>, forty_two;
1165 eq: I256::new(42)
1166 );
1167
1168 assert_de_bytes!(
1169 bytes::be::deserialize::<U256, _>, [0xff; 31];
1170 err
1171 );
1172 assert_de_bytes!(
1173 bytes::be::deserialize::<U256, _>, [0xff; 33];
1174 err
1175 );
1176 assert_de_bytes!(
1177 bytes::be::deserialize::<I256, _>, [0xff; 31];
1178 err
1179 );
1180 assert_de_bytes!(
1181 bytes::be::deserialize::<I256, _>, [0xff; 33];
1182 err
1183 );
1184
1185 assert_de_bytes!(
1186 compressed_bytes::le::deserialize::<U256, _>, [];
1187 eq: U256::ZERO
1188 );
1189 assert_de_bytes!(
1190 compressed_bytes::le::deserialize::<U256, _>, [0xff; 32];
1191 eq: U256::MAX
1192 );
1193
1194 assert_de_bytes!(
1195 compressed_bytes::le::deserialize::<U256, _>, [0x2a];
1196 eq: U256::new(42)
1197 );
1198 assert_de_bytes!(
1199 compressed_bytes::le::deserialize::<U256, _>, [0xee, 0xff];
1200 eq: U256::new(0xffee)
1201 );
1202 assert_de_bytes!(
1203 compressed_bytes::le::deserialize::<I256, _>, [];
1204 eq: I256::ZERO
1205 );
1206 assert_de_bytes!(
1207 compressed_bytes::le::deserialize::<I256, _>, [0xff];
1208 eq: I256::new(-1)
1209 );
1210
1211 assert_de_bytes!(
1212 compressed_bytes::le::deserialize::<U256, _>, [0xff; 33];
1213 err
1214 );
1215 assert_de_bytes!(
1216 compressed_bytes::le::deserialize::<I256, _>, [0xff; 33];
1217 err
1218 );
1219
1220 assert_de_bytes!(
1221 compressed_bytes::be::deserialize::<U256, _>, [];
1222 eq: U256::ZERO
1223 );
1224 assert_de_bytes!(
1225 compressed_bytes::be::deserialize::<U256, _>, [0xff; 32];
1226 eq: U256::MAX
1227 );
1228
1229 assert_de_bytes!(
1230 compressed_bytes::be::deserialize::<U256, _>, [0x2a];
1231 eq: U256::new(42)
1232 );
1233 assert_de_bytes!(
1234 compressed_bytes::be::deserialize::<U256, _>, [0xff, 0xee];
1235 eq: U256::new(0xffee)
1236 );
1237 assert_de_bytes!(
1238 compressed_bytes::be::deserialize::<I256, _>, [];
1239 eq: I256::ZERO
1240 );
1241 assert_de_bytes!(
1242 compressed_bytes::be::deserialize::<I256, _>, [0xfe];
1243 eq: I256::new(-2)
1244 );
1245
1246 assert_de_bytes!(
1247 compressed_bytes::be::deserialize::<U256, _>, [0xff; 33];
1248 err
1249 );
1250 assert_de_bytes!(
1251 compressed_bytes::be::deserialize::<I256, _>, [0xff; 33];
1252 err
1253 );
1254 }
1255
1256 #[test]
1257 fn formatting_buffer() {
1258 for value in [
1259 Box::new(I256::MIN) as Box<dyn Display>,
1260 Box::new(I256::MAX),
1261 Box::new(U256::MIN),
1262 Box::new(U256::MAX),
1263 ] {
1264 let mut f = FormatBuffer::decimal();
1265 write!(f, "{value}").unwrap();
1266 assert_eq!(f.as_str(), format!("{value}"));
1267 }
1268
1269 for value in [
1270 Box::new(I256::MIN) as Box<dyn LowerHex>,
1271 Box::new(I256::MAX),
1272 Box::new(U256::MIN),
1273 Box::new(U256::MAX),
1274 ] {
1275 let mut f = FormatBuffer::hex();
1276 let value = &*value;
1277 write!(f, "{value:-#x}").unwrap();
1278 assert_eq!(f.as_str(), format!("{value:-#x}"));
1279 }
1280 }
1281
1282 struct StringSerializer;
1284
1285 impl Serializer for StringSerializer {
1286 type Ok = String;
1287 type Error = fmt::Error;
1288 type SerializeSeq = Impossible<String, fmt::Error>;
1289 type SerializeTuple = Impossible<String, fmt::Error>;
1290 type SerializeTupleStruct = Impossible<String, fmt::Error>;
1291 type SerializeTupleVariant = Impossible<String, fmt::Error>;
1292 type SerializeMap = Impossible<String, fmt::Error>;
1293 type SerializeStruct = Impossible<String, fmt::Error>;
1294 type SerializeStructVariant = Impossible<String, fmt::Error>;
1295 fn serialize_bool(self, _: bool) -> Result<Self::Ok, Self::Error> {
1296 unimplemented!()
1297 }
1298 fn serialize_i8(self, _: i8) -> Result<Self::Ok, Self::Error> {
1299 unimplemented!()
1300 }
1301 fn serialize_i16(self, _: i16) -> Result<Self::Ok, Self::Error> {
1302 unimplemented!()
1303 }
1304 fn serialize_i32(self, _: i32) -> Result<Self::Ok, Self::Error> {
1305 unimplemented!()
1306 }
1307 fn serialize_i64(self, _: i64) -> Result<Self::Ok, Self::Error> {
1308 unimplemented!()
1309 }
1310 fn serialize_u8(self, _: u8) -> Result<Self::Ok, Self::Error> {
1311 unimplemented!()
1312 }
1313 fn serialize_u16(self, _: u16) -> Result<Self::Ok, Self::Error> {
1314 unimplemented!()
1315 }
1316 fn serialize_u32(self, _: u32) -> Result<Self::Ok, Self::Error> {
1317 unimplemented!()
1318 }
1319 fn serialize_u64(self, _: u64) -> Result<Self::Ok, Self::Error> {
1320 unimplemented!()
1321 }
1322 fn serialize_f32(self, _: f32) -> Result<Self::Ok, Self::Error> {
1323 unimplemented!()
1324 }
1325 fn serialize_f64(self, _: f64) -> Result<Self::Ok, Self::Error> {
1326 unimplemented!()
1327 }
1328 fn serialize_char(self, _: char) -> Result<Self::Ok, Self::Error> {
1329 unimplemented!()
1330 }
1331 fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
1332 Ok(v.into())
1333 }
1334 fn serialize_bytes(self, _: &[u8]) -> Result<Self::Ok, Self::Error> {
1335 unimplemented!()
1336 }
1337 fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
1338 unimplemented!()
1339 }
1340 fn serialize_some<T>(self, _: &T) -> Result<Self::Ok, Self::Error>
1341 where
1342 T: Serialize + ?Sized,
1343 {
1344 unimplemented!()
1345 }
1346 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
1347 unimplemented!()
1348 }
1349 fn serialize_unit_struct(self, _: &'static str) -> Result<Self::Ok, Self::Error> {
1350 unimplemented!()
1351 }
1352 fn serialize_unit_variant(
1353 self,
1354 _: &'static str,
1355 _: u32,
1356 _: &'static str,
1357 ) -> Result<Self::Ok, Self::Error> {
1358 unimplemented!()
1359 }
1360 fn serialize_newtype_struct<T>(
1361 self,
1362 _: &'static str,
1363 _: &T,
1364 ) -> Result<Self::Ok, Self::Error>
1365 where
1366 T: Serialize + ?Sized,
1367 {
1368 unimplemented!()
1369 }
1370 fn serialize_newtype_variant<T>(
1371 self,
1372 _: &'static str,
1373 _: u32,
1374 _: &'static str,
1375 _: &T,
1376 ) -> Result<Self::Ok, Self::Error>
1377 where
1378 T: Serialize + ?Sized,
1379 {
1380 unimplemented!()
1381 }
1382 fn serialize_seq(self, _: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
1383 unimplemented!()
1384 }
1385 fn serialize_tuple(self, _: usize) -> Result<Self::SerializeTuple, Self::Error> {
1386 unimplemented!()
1387 }
1388 fn serialize_tuple_struct(
1389 self,
1390 _: &'static str,
1391 _: usize,
1392 ) -> Result<Self::SerializeTupleStruct, Self::Error> {
1393 unimplemented!()
1394 }
1395 fn serialize_tuple_variant(
1396 self,
1397 _: &'static str,
1398 _: u32,
1399 _: &'static str,
1400 _: usize,
1401 ) -> Result<Self::SerializeTupleVariant, Self::Error> {
1402 unimplemented!()
1403 }
1404 fn serialize_map(self, _: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
1405 unimplemented!()
1406 }
1407 fn serialize_struct(
1408 self,
1409 _: &'static str,
1410 _: usize,
1411 ) -> Result<Self::SerializeStruct, Self::Error> {
1412 unimplemented!()
1413 }
1414 fn serialize_struct_variant(
1415 self,
1416 _: &'static str,
1417 _: u32,
1418 _: &'static str,
1419 _: usize,
1420 ) -> Result<Self::SerializeStructVariant, Self::Error> {
1421 unimplemented!()
1422 }
1423 fn collect_str<T>(self, _: &T) -> Result<Self::Ok, Self::Error>
1424 where
1425 T: Display + ?Sized,
1426 {
1427 unimplemented!()
1428 }
1429 }
1430
1431 struct BytesSerializer;
1433
1434 impl Serializer for BytesSerializer {
1435 type Ok = Vec<u8>;
1436 type Error = fmt::Error;
1437 type SerializeSeq = Impossible<Vec<u8>, fmt::Error>;
1438 type SerializeTuple = Impossible<Vec<u8>, fmt::Error>;
1439 type SerializeTupleStruct = Impossible<Vec<u8>, fmt::Error>;
1440 type SerializeTupleVariant = Impossible<Vec<u8>, fmt::Error>;
1441 type SerializeMap = Impossible<Vec<u8>, fmt::Error>;
1442 type SerializeStruct = Impossible<Vec<u8>, fmt::Error>;
1443 type SerializeStructVariant = Impossible<Vec<u8>, fmt::Error>;
1444 fn serialize_bool(self, _: bool) -> Result<Self::Ok, Self::Error> {
1445 unimplemented!()
1446 }
1447 fn serialize_i8(self, _: i8) -> Result<Self::Ok, Self::Error> {
1448 unimplemented!()
1449 }
1450 fn serialize_i16(self, _: i16) -> Result<Self::Ok, Self::Error> {
1451 unimplemented!()
1452 }
1453 fn serialize_i32(self, _: i32) -> Result<Self::Ok, Self::Error> {
1454 unimplemented!()
1455 }
1456 fn serialize_i64(self, _: i64) -> Result<Self::Ok, Self::Error> {
1457 unimplemented!()
1458 }
1459 fn serialize_u8(self, _: u8) -> Result<Self::Ok, Self::Error> {
1460 unimplemented!()
1461 }
1462 fn serialize_u16(self, _: u16) -> Result<Self::Ok, Self::Error> {
1463 unimplemented!()
1464 }
1465 fn serialize_u32(self, _: u32) -> Result<Self::Ok, Self::Error> {
1466 unimplemented!()
1467 }
1468 fn serialize_u64(self, _: u64) -> Result<Self::Ok, Self::Error> {
1469 unimplemented!()
1470 }
1471 fn serialize_f32(self, _: f32) -> Result<Self::Ok, Self::Error> {
1472 unimplemented!()
1473 }
1474 fn serialize_f64(self, _: f64) -> Result<Self::Ok, Self::Error> {
1475 unimplemented!()
1476 }
1477 fn serialize_char(self, _: char) -> Result<Self::Ok, Self::Error> {
1478 unimplemented!()
1479 }
1480 fn serialize_str(self, _: &str) -> Result<Self::Ok, Self::Error> {
1481 unimplemented!()
1482 }
1483 fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
1484 Ok(v.to_vec())
1485 }
1486 fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
1487 unimplemented!()
1488 }
1489 fn serialize_some<T>(self, _: &T) -> Result<Self::Ok, Self::Error>
1490 where
1491 T: Serialize + ?Sized,
1492 {
1493 unimplemented!()
1494 }
1495 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
1496 unimplemented!()
1497 }
1498 fn serialize_unit_struct(self, _: &'static str) -> Result<Self::Ok, Self::Error> {
1499 unimplemented!()
1500 }
1501 fn serialize_unit_variant(
1502 self,
1503 _: &'static str,
1504 _: u32,
1505 _: &'static str,
1506 ) -> Result<Self::Ok, Self::Error> {
1507 unimplemented!()
1508 }
1509 fn serialize_newtype_struct<T>(
1510 self,
1511 _: &'static str,
1512 _: &T,
1513 ) -> Result<Self::Ok, Self::Error>
1514 where
1515 T: Serialize + ?Sized,
1516 {
1517 unimplemented!()
1518 }
1519 fn serialize_newtype_variant<T>(
1520 self,
1521 _: &'static str,
1522 _: u32,
1523 _: &'static str,
1524 _: &T,
1525 ) -> Result<Self::Ok, Self::Error>
1526 where
1527 T: Serialize + ?Sized,
1528 {
1529 unimplemented!()
1530 }
1531 fn serialize_seq(self, _: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
1532 unimplemented!()
1533 }
1534 fn serialize_tuple(self, _: usize) -> Result<Self::SerializeTuple, Self::Error> {
1535 unimplemented!()
1536 }
1537 fn serialize_tuple_struct(
1538 self,
1539 _: &'static str,
1540 _: usize,
1541 ) -> Result<Self::SerializeTupleStruct, Self::Error> {
1542 unimplemented!()
1543 }
1544 fn serialize_tuple_variant(
1545 self,
1546 _: &'static str,
1547 _: u32,
1548 _: &'static str,
1549 _: usize,
1550 ) -> Result<Self::SerializeTupleVariant, Self::Error> {
1551 unimplemented!()
1552 }
1553 fn serialize_map(self, _: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
1554 unimplemented!()
1555 }
1556 fn serialize_struct(
1557 self,
1558 _: &'static str,
1559 _: usize,
1560 ) -> Result<Self::SerializeStruct, Self::Error> {
1561 unimplemented!()
1562 }
1563 fn serialize_struct_variant(
1564 self,
1565 _: &'static str,
1566 _: u32,
1567 _: &'static str,
1568 _: usize,
1569 ) -> Result<Self::SerializeStructVariant, Self::Error> {
1570 unimplemented!()
1571 }
1572 fn collect_str<T>(self, _: &T) -> Result<Self::Ok, Self::Error>
1573 where
1574 T: Display + ?Sized,
1575 {
1576 unimplemented!()
1577 }
1578 }
1579}