in src/serialize/per_type/numpy.rs [915:958]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
unsafe {
let ob_type = ob_type!(self.ptr);
let scalar_types =
unsafe { NUMPY_TYPES.get_or_init(load_numpy_types).unwrap().as_ref() };
if ob_type == scalar_types.float64 {
(*(self.ptr as *mut NumpyFloat64)).serialize(serializer)
} else if ob_type == scalar_types.float32 {
(*(self.ptr as *mut NumpyFloat32)).serialize(serializer)
} else if ob_type == scalar_types.float16 {
(*(self.ptr as *mut NumpyFloat16)).serialize(serializer)
} else if ob_type == scalar_types.int64 {
(*(self.ptr as *mut NumpyInt64)).serialize(serializer)
} else if ob_type == scalar_types.int32 {
(*(self.ptr as *mut NumpyInt32)).serialize(serializer)
} else if ob_type == scalar_types.int16 {
(*(self.ptr as *mut NumpyInt16)).serialize(serializer)
} else if ob_type == scalar_types.int8 {
(*(self.ptr as *mut NumpyInt8)).serialize(serializer)
} else if ob_type == scalar_types.uint64 {
(*(self.ptr as *mut NumpyUint64)).serialize(serializer)
} else if ob_type == scalar_types.uint32 {
(*(self.ptr as *mut NumpyUint32)).serialize(serializer)
} else if ob_type == scalar_types.uint16 {
(*(self.ptr as *mut NumpyUint16)).serialize(serializer)
} else if ob_type == scalar_types.uint8 {
(*(self.ptr as *mut NumpyUint8)).serialize(serializer)
} else if ob_type == scalar_types.bool_ {
(*(self.ptr as *mut NumpyBool)).serialize(serializer)
} else if ob_type == scalar_types.datetime64 {
let unit = NumpyDatetimeUnit::from_pyobject(self.ptr);
let obj = &*(self.ptr as *mut NumpyDatetime64);
let dt = unit
.datetime(obj.value, self.opts)
.map_err(NumpyDateTimeError::into_serde_err)?;
dt.serialize(serializer)
} else {
unreachable!()
}
}
}