View in context in the libbitcoin Slack #general mirror.
json-rpc parser was completed, and very efficient. No allocations until moving completed pieces, no intermediate copying. Streaming SAX parser, one char at a time. This was about 6 days work, and another day for the custom serializer. The serializer is not streaming however. I also implemented both using boost::json parse/serialization, which is a DOM model, not SAX. This is a highly efficient library, and easy to use, however the DOM model results in a full copy of the object in/out of an intermediate state. Additionally I didn't believe that there was an associated streaming parser. Turns out that there is, both parse and serialize can be streamed on an individual char boundary (so a benefit on the serialization side). After discovering this I took another look at the tradeoffs between the existing custom implementation and a boost::json based impl.