in src/serialize/serializer.rs [64:108]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match pyobject_to_obtype(self.ptr, self.state.opts()) {
ObType::Str => StrSerializer::new(self.ptr).serialize(serializer),
ObType::StrSubclass => StrSubclassSerializer::new(self.ptr).serialize(serializer),
ObType::Int => IntSerializer::new(self.ptr, self.state.opts()).serialize(serializer),
ObType::None => NoneSerializer::new().serialize(serializer),
ObType::Float => FloatSerializer::new(self.ptr).serialize(serializer),
ObType::Bool => BoolSerializer::new(self.ptr).serialize(serializer),
ObType::Datetime => DateTime::new(self.ptr, self.state.opts()).serialize(serializer),
ObType::Date => Date::new(self.ptr).serialize(serializer),
ObType::Time => Time::new(self.ptr, self.state.opts()).serialize(serializer),
ObType::Uuid => UUID::new(self.ptr).serialize(serializer),
ObType::Dict => {
DictGenericSerializer::new(self.ptr, self.state, self.default).serialize(serializer)
}
ObType::List => {
if ffi!(Py_SIZE(self.ptr)) == 0 {
ZeroListSerializer::new().serialize(serializer)
} else {
ListTupleSerializer::from_list(self.ptr, self.state, self.default)
.serialize(serializer)
}
}
ObType::Tuple => {
if ffi!(Py_SIZE(self.ptr)) == 0 {
ZeroListSerializer::new().serialize(serializer)
} else {
ListTupleSerializer::from_tuple(self.ptr, self.state, self.default)
.serialize(serializer)
}
}
ObType::Dataclass => DataclassGenericSerializer::new(self).serialize(serializer),
ObType::Enum => EnumSerializer::new(self).serialize(serializer),
ObType::NumpyArray => NumpySerializer::new(self).serialize(serializer),
ObType::NumpyScalar => {
NumpyScalar::new(self.ptr, self.state.opts()).serialize(serializer)
}
ObType::Fragment => FragmentSerializer::new(self.ptr).serialize(serializer),
ObType::PyTorchTensor => PyTorchSerializer::new(self).serialize(serializer),
ObType::Unknown => DefaultSerializer::new(self).serialize(serializer),
}
}