msgpack4nim icon indicating copy to clipboard operation
msgpack4nim copied to clipboard

Exception for int64 when a field is DateTime

Open jfilby opened this issue 2 years ago • 3 comments

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.

jfilby avatar Oct 11 '21 16:10 jfilby

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

jangko avatar Oct 12 '21 02:10 jangko

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

jfilby avatar Oct 12 '21 11:10 jfilby

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.

jangko avatar Oct 12 '21 15:10 jangko