forked from ijl/orjson
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherror.rs
More file actions
59 lines (56 loc) · 2.42 KB
/
Copy patherror.rs
File metadata and controls
59 lines (56 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// SPDX-License-Identifier: (Apache-2.0 OR MIT)
use crate::error::INVALID_STR;
use std::ffi::CStr;
use std::ptr::NonNull;
pub enum SerializeError {
DatetimeLibraryUnsupported,
DefaultRecursionLimit,
Integer53Bits,
Integer64Bits,
InvalidStr,
KeyMustBeStr,
RecursionLimit,
TimeHasTzinfo,
DictIntegerKey64Bit,
DictKeyInvalidType,
NumpyMalformed,
NumpyNotCContiguous,
NumpyUnsupportedDatatype,
UnsupportedType(NonNull<pyo3_ffi::PyObject>),
}
impl std::fmt::Display for SerializeError {
#[cold]
#[cfg_attr(feature = "unstable-simd", optimize(size))]
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match *self {
SerializeError::DatetimeLibraryUnsupported => write!(f, "datetime's timezone library is not supported: use datetime.timezone.utc, pendulum, pytz, or dateutil"),
SerializeError::DefaultRecursionLimit => {
write!(f, "default serializer exceeds recursion limit")
}
SerializeError::Integer53Bits => write!(f, "Integer exceeds 53-bit range"),
SerializeError::Integer64Bits => write!(f, "Integer exceeds 64-bit range"),
SerializeError::InvalidStr => write!(f, "{}", INVALID_STR),
SerializeError::KeyMustBeStr => write!(f, "Dict key must be str"),
SerializeError::RecursionLimit => write!(f, "Recursion limit reached"),
SerializeError::TimeHasTzinfo => write!(f, "datetime.time must not have tzinfo set"),
SerializeError::DictIntegerKey64Bit => {
write!(f, "Dict integer key must be within 64-bit range")
}
SerializeError::DictKeyInvalidType => {
write!(f, "Dict key must a type serializable with OPT_NON_STR_KEYS")
}
SerializeError::NumpyMalformed => write!(f, "numpy array is malformed"),
SerializeError::NumpyNotCContiguous => write!(
f,
"numpy array is not C contiguous; use ndarray.tolist() in default"
),
SerializeError::NumpyUnsupportedDatatype => {
write!(f, "unsupported datatype in numpy array")
}
SerializeError::UnsupportedType(ptr) => {
let name = unsafe { CStr::from_ptr((*ob_type!(ptr.as_ptr())).tp_name).to_string_lossy() };
write!(f, "Type is not JSON serializable: {}", name)
}
}
}
}