msgpack4nim
msgpack4nim copied to clipboard
Exception for int64 when a field is DateTime
When I try to unpack an object type that contains int64 types I get:
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(1201) unpack
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(938) unpack_type
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(1201) unpack
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(1085) unpack_type
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(1201) unpack
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(1085) unpack_type
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(1201) unpack
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(845) unpack_type
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(842) unpack_int_imp_select
C:\Users\user\.nimble\pkgs\msgpack4nim-0.3.1\msgpack4nim.nim(511) unpack_imp_int64
Error: unhandled exception: int64 [ObjectConversionDefect]
The object I'm packing/unpacking is a seq of an object type. This is to and from a FileStream.
can you provide code to reproduce the bug? nim compiler version as well.
I managed to narrow down the issue. It seems that any DateTime field in an object causes the error. I've attached a test case. I understand this isn't something that's handled by MsgPack spec. However the error message is misleading. Is there anyway to fail with a more appropriate error message when a type that isn't compatible is in an object?
msgpack4nim depends heavily on Nim generics, much of the serialization code generated by the compiler, and that come with a cost. one of them is misleading error message.
a better serialization framework would be using macros + generics to generate better error message.
btw, your problem can be solved by overriding pack_type
and unpack_type
for DateTime
.