in src/serialize/per_type/list.rs [84:190]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
if unlikely!(self.state.recursion_limit()) {
err!(SerializeError::RecursionLimit)
}
debug_assert!(self.len >= 1);
let mut seq = serializer.serialize_seq(None).unwrap();
for idx in 0..self.len {
let value = unsafe { *((self.data_ptr).add(idx)) };
match pyobject_to_obtype(value, self.state.opts()) {
ObType::Str => {
seq.serialize_element(&StrSerializer::new(value))?;
}
ObType::StrSubclass => {
seq.serialize_element(&StrSubclassSerializer::new(value))?;
}
ObType::Int => {
seq.serialize_element(&IntSerializer::new(value, self.state.opts()))?;
}
ObType::None => {
seq.serialize_element(&NoneSerializer::new()).unwrap();
}
ObType::Float => {
seq.serialize_element(&FloatSerializer::new(value))?;
}
ObType::Bool => {
seq.serialize_element(&BoolSerializer::new(value)).unwrap();
}
ObType::Datetime => {
seq.serialize_element(&DateTime::new(value, self.state.opts()))?;
}
ObType::Date => {
seq.serialize_element(&Date::new(value))?;
}
ObType::Time => {
seq.serialize_element(&Time::new(value, self.state.opts()))?;
}
ObType::Uuid => {
seq.serialize_element(&UUID::new(value)).unwrap();
}
ObType::Dict => {
let pyvalue = DictGenericSerializer::new(value, self.state, self.default);
seq.serialize_element(&pyvalue)?;
}
ObType::List => {
if ffi!(Py_SIZE(value)) == 0 {
seq.serialize_element(&ZeroListSerializer::new()).unwrap();
} else {
let pyvalue =
ListTupleSerializer::from_list(value, self.state, self.default);
seq.serialize_element(&pyvalue)?;
}
}
ObType::Tuple => {
if ffi!(Py_SIZE(value)) == 0 {
seq.serialize_element(&ZeroListSerializer::new()).unwrap();
} else {
let pyvalue =
ListTupleSerializer::from_tuple(value, self.state, self.default);
seq.serialize_element(&pyvalue)?;
}
}
ObType::Dataclass => {
seq.serialize_element(&DataclassGenericSerializer::new(
&PyObjectSerializer::new(value, self.state, self.default),
))?;
}
ObType::Enum => {
seq.serialize_element(&EnumSerializer::new(&PyObjectSerializer::new(
value,
self.state,
self.default,
)))?;
}
ObType::NumpyArray => {
seq.serialize_element(&NumpySerializer::new(&PyObjectSerializer::new(
value,
self.state,
self.default,
)))?;
}
ObType::NumpyScalar => {
seq.serialize_element(&NumpyScalar::new(value, self.state.opts()))?;
}
ObType::Fragment => {
seq.serialize_element(&FragmentSerializer::new(value))?;
}
ObType::PyTorchTensor => {
seq.serialize_element(&PyTorchSerializer::new(&PyObjectSerializer::new(
value,
self.state,
self.default,
)))?;
}
ObType::Unknown => {
seq.serialize_element(&DefaultSerializer::new(&PyObjectSerializer::new(
value,
self.state,
self.default,
)))?;
}
}
}
seq.end()
}