Java has one, implemented as a byte coder. My guess is that nobody has gotten around to implementing it yet for portability.
On Fri, Sep 27, 2019 at 12:44 PM Chad Dombrova <[email protected]> wrote: > Hi all, > It seems a bit unfortunate that there isn’t a portable way to serialize a > boolean value. > > I’m working on porting my external PubsubIO PR over to use the improved > schema-based external transform API in python, but because of this > limitation I can’t use boolean values. For example, this fails: > > ReadFromPubsubSchema = typing.NamedTuple( > 'ReadFromPubsubSchema', > [ > ('topic', typing.Optional[unicode]), > ('subscription', typing.Optional[unicode]), > ('id_label', typing.Optional[unicode]), > ('with_attributes', bool), > ('timestamp_attribute', typing.Optional[unicode]), > ] > ) > > It fails because coders.get_coder(bool) returns the non-portable pickle > coder. > > In the short term I can hack something into the external transform API to > use varint coder for bools, but this kind of hacky approach to portability > won’t work in scenarios where round-tripping is required without user > intervention. In other words, in python it is not uncommon to test if x > is True, in which case the integer 1 would fail this test. All of that is > to say that a BooleanCoder would be a convenient way to ensure the proper > type is used everywhere. > > So, I was just wondering why it’s not there? Are there concerns over > whether booleans are universal enough to make part of the portability > standard? > > -chad >
