]>
Commit | Line | Data |
---|---|---|
1 | #[cfg(not(no_serde_derive))] | |
2 | pub mod de; | |
3 | #[cfg(not(no_serde_derive))] | |
4 | pub mod ser; | |
5 | ||
6 | // FIXME: #[cfg(doctest)] once https://github.com/rust-lang/rust/issues/67295 is fixed. | |
7 | pub mod doc; | |
8 | ||
9 | pub use crate::lib::clone::Clone; | |
10 | pub use crate::lib::convert::{From, Into}; | |
11 | pub use crate::lib::default::Default; | |
12 | pub use crate::lib::fmt::{self, Formatter}; | |
13 | pub use crate::lib::marker::PhantomData; | |
14 | pub use crate::lib::option::Option::{self, None, Some}; | |
15 | pub use crate::lib::ptr; | |
16 | pub use crate::lib::result::Result::{self, Err, Ok}; | |
17 | ||
18 | pub use self::string::from_utf8_lossy; | |
19 | ||
20 | #[cfg(any(feature = "alloc", feature = "std"))] | |
21 | pub use crate::lib::{ToString, Vec}; | |
22 | ||
23 | #[cfg(not(no_core_try_from))] | |
24 | pub use crate::lib::convert::TryFrom; | |
25 | ||
26 | mod string { | |
27 | use crate::lib::*; | |
28 | ||
29 | #[cfg(any(feature = "std", feature = "alloc"))] | |
30 | pub fn from_utf8_lossy(bytes: &[u8]) -> Cow<str> { | |
31 | String::from_utf8_lossy(bytes) | |
32 | } | |
33 | ||
34 | // The generated code calls this like: | |
35 | // | |
36 | // let value = &_serde::__private::from_utf8_lossy(bytes); | |
37 | // Err(_serde::de::Error::unknown_variant(value, VARIANTS)) | |
38 | // | |
39 | // so it is okay for the return type to be different from the std case as long | |
40 | // as the above works. | |
41 | #[cfg(not(any(feature = "std", feature = "alloc")))] | |
42 | pub fn from_utf8_lossy(bytes: &[u8]) -> &str { | |
43 | // Three unicode replacement characters if it fails. They look like a | |
44 | // white-on-black question mark. The user will recognize it as invalid | |
45 | // UTF-8. | |
46 | str::from_utf8(bytes).unwrap_or("\u{fffd}\u{fffd}\u{fffd}") | |
47 | } | |
48 | } |