msgpack-perl icon indicating copy to clipboard operation
msgpack-perl copied to clipboard

Use Types::Serialiser::Boolean for true/false

Open wisnij opened this issue 11 years ago • 5 comments

Could Types::Serialiser::Boolean be used rather than defining Data::MessagePack::Boolean internally? Using and checking for that during conversion would make interoperability with other serialization formats a lot easier. In particular, it would be a big win to be able to convert from JSON text to Perl data and then into MessagePack, and vice versa, without having to account for the boolean types manually.

wisnij avatar Aug 06 '14 18:08 wisnij

Looks nice. Patches welcome!

gfx avatar Aug 08 '14 11:08 gfx

I’m working on a module to support WAMP, a messaging/RPC protocol. That protocol supports MessagePack, but it’s a bit clumsy to implement because D::MP only uses its own boolean objects.

Can you point me in the appropriate direction for accessing and testing equality of a Perl global from XS? I may try to find time to work on this.

FGasper avatar Mar 22 '17 14:03 FGasper

Ah, I am stuck with this one as well -- JSON->Perl data->MP -- fails.

Looks like a MR has already been submitted to address this -- https://github.com/msgpack/msgpack-perl/pull/37.

Is there anything I can help with to have the fix merged into the module?

Thanks in advance!

foobargeez avatar Sep 26 '17 09:09 foobargeez

Something in production broke because of this issue, so I had to come up with a workaround. Sharing it here so it helps others who may be looking for one:

  • If your input has blessed booleans, store them as \1 or \0. In my case, I am dealing with TOML files, so something like:
        my $parser = TOML::Parser->new(
            inflate_boolean => sub {
                my $boolean = shift;
                return $boolean eq 'true' ? \1 : \0;
            }
        );
  • Data::MessagePack stores the data as Data::MessagePack::Boolean blessed objects
  • Once you unpack the data, do an unbless (from Data::Structure::Util)

That should do the trick until the Data::MessagePack deals with Types::Serialiser::Boolean blessed objects.

foobargeez avatar Sep 26 '17 13:09 foobargeez

@foobargeez I’m not sure why my PR is closed, but it expands compatibility to Types::Serialiser while maintaining compatibility with the proprietary flags.

This module appears to be abandoned, though. I tried to contact the maintainer several times and got no response.

FGasper avatar Sep 26 '17 14:09 FGasper