Skip to content
Snippets Groups Projects
Commit a9eff9f72d1e authored by ijl's avatar ijl
Browse files

Fix serializing empty dataclass

parent 282ba2dc0eda
Branches
No related tags found
No related merge requests found
...@@ -46,6 +46,9 @@ ...@@ -46,6 +46,9 @@
let fields = ffi!(PyObject_GetAttr(self.ptr, DATACLASS_FIELDS_STR)); let fields = ffi!(PyObject_GetAttr(self.ptr, DATACLASS_FIELDS_STR));
ffi!(Py_DECREF(fields)); ffi!(Py_DECREF(fields));
let len = unsafe { PyDict_GET_SIZE(fields) as usize }; let len = unsafe { PyDict_GET_SIZE(fields) as usize };
if unlikely!(len == 0) {
return serializer.serialize_map(Some(0)).unwrap().end();
}
let mut map = serializer.serialize_map(None).unwrap(); let mut map = serializer.serialize_map(None).unwrap();
let mut pos = 0isize; let mut pos = 0isize;
let mut str_size: pyo3::ffi::Py_ssize_t = 0; let mut str_size: pyo3::ffi::Py_ssize_t = 0;
......
...@@ -366,6 +366,9 @@ ...@@ -366,6 +366,9 @@
if !dict.is_null() { if !dict.is_null() {
ffi!(Py_DECREF(dict)); ffi!(Py_DECREF(dict));
let len = unsafe { PyDict_GET_SIZE(dict) as usize }; let len = unsafe { PyDict_GET_SIZE(dict) as usize };
if unlikely!(len == 0) {
return serializer.serialize_map(Some(0)).unwrap().end();
}
let mut map = serializer.serialize_map(None).unwrap(); let mut map = serializer.serialize_map(None).unwrap();
let mut pos = 0isize; let mut pos = 0isize;
let mut str_size: pyo3::ffi::Py_ssize_t = 0; let mut str_size: pyo3::ffi::Py_ssize_t = 0;
......
...@@ -15,6 +15,18 @@ ...@@ -15,6 +15,18 @@
@dataclass @dataclass
class EmptyDataclass:
pass
@dataclass
class EmptyDataclassSlots:
__slots__ = ()
pass
@dataclass
class Dataclass1: class Dataclass1:
name: str name: str
number: int number: int
...@@ -115,6 +127,22 @@ ...@@ -115,6 +127,22 @@
with self.assertRaises(orjson.JSONEncodeError): with self.assertRaises(orjson.JSONEncodeError):
orjson.dumps(obj1) orjson.dumps(obj1)
def test_dataclass_empty(self):
"""
dumps() no attributes
"""
self.assertEqual(
orjson.dumps(EmptyDataclass()), b"{}",
)
def test_dataclass_empty_slots(self):
"""
dumps() no attributes slots
"""
self.assertEqual(
orjson.dumps(EmptyDataclassSlots()), b"{}",
)
def test_dataclass_default_arg(self): def test_dataclass_default_arg(self):
""" """
dumps() dataclass default arg dumps() dataclass default arg
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment