jangko / msgpack4nim

MessagePack serializer/deserializer implementation for Nim / msgpack.org[Nim]
http://msgpack.org/
119 stars 21 forks source link

Exception for int64 when a field is DateTime #63

Open jfilby opened 2 years ago

jfilby commented 2 years ago

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.

jangko commented 2 years ago

can you provide code to reproduce the bug? nim compiler version as well.

jfilby commented 2 years ago

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?

fail_msgpack.zip

jangko commented 2 years ago

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.