bitcode/serde/
mod.rs
1use crate::error::{error_from_display, Error};
2use alloc::boxed::Box;
3use alloc::vec::Vec;
4use core::fmt::Display;
5
6mod de;
7mod guard;
8mod ser;
9mod variant;
10
11pub use de::*;
12pub use ser::*;
13
14enum Never {}
16#[cold]
17#[inline(never)]
18fn panic_type_changed() -> Never {
19 panic!("type changed")
20}
21macro_rules! type_changed {
22 () => {
23 #[allow(unreachable_code)]
24 match super::panic_type_changed() {} };
26}
27use type_changed;
28
29fn default_box_slice<T: Default>(len: usize) -> Box<[T]> {
30 let mut vec = vec![];
31 vec.resize_with(len, Default::default);
32 vec.into()
33}
34
35#[inline(always)]
36fn get_mut_or_resize<T: Default>(vec: &mut Vec<T>, index: usize) -> &mut T {
37 if index >= vec.len() {
38 #[cold]
39 #[inline(never)]
40 fn cold<T: Default>(vec: &mut Vec<T>, index: usize) {
41 vec.resize_with(index + 1, Default::default);
42 }
43 cold(vec, index);
44 }
45 unsafe { vec.get_unchecked_mut(index) }
47}
48
49#[cfg(not(feature = "std"))]
50impl serde::ser::StdError for Error {}
51
52impl serde::ser::Error for Error {
53 fn custom<T>(t: T) -> Self
54 where
55 T: Display,
56 {
57 error_from_display(t)
58 }
59}
60
61impl serde::de::Error for Error {
62 fn custom<T>(t: T) -> Self
63 where
64 T: Display,
65 {
66 error_from_display(t)
67 }
68}