<p dir="ltr">Hi all,</p>
<p dir="ltr">This is just a thought dump sent from my phone, because I will likely forget all about it by the time I get to my laptop again.</p>
<p dir="ltr">I've come across MessagePack (mp) in the past [1] and didn't think much about it, for some reason it recently occurred to me it could be a good fit for the CLI.</p>
<p dir="ltr">mp is a binary equivalent to json, and it's no secret that I really don't like json for general purpose serialization (read: unless it's consumed by JavaScript, and I don't hold JavaScript dear in my heart). However mp has some interesting boundaries for types that don't exist with json.</p>
<p dir="ltr">The CLI could get structured responses from the child serialized as mp instead of plain text.</p>
<p dir="ltr">It could either be the current scheme of a line containing metadata about the response followed by a payload, or a single mp response containing the status and the structured response.</p>
<p dir="ltr">I like the latter better because the response could be streamed instead of built upfront. It could improve the situation when you have thousands of backends for instance.</p>
<p dir="ltr">If the CLI is binary, it's no longer human-friendly. However the responsibility of rendering could be shift in varnishadm with the possibility of outputting either json or plain text. Setups (like varnish-agent) relying on -T or -M would need to understand mp, possibly with the help of libvarnishapi.</p>
<p dir="ltr">Having structured responses could also mean the introduction of schemas. With the need for versioning of the CLI protocol similar to VRT (breaking vs adding).</p>
<p dir="ltr">Commands handled by the manager should obviously also speak mp too.</p>
<p dir="ltr">The spec [2] is very straightforward and even allows extension points, although I don't think we'd need any. Native support for blobs too, but again I don't see a use case for the CLI.</p>
<p dir="ltr">varnishstat could also have mp rendering in addition to the existing XML and json.</p>
<p dir="ltr">Dridi, enjoying cloudy-but-sunny Hamburg</p>
<p dir="ltr">[1] <a href="http://msgpack.org">http://msgpack.org</a><br>
[2] <a href="https://github.com/msgpack/msgpack/blob/master/spec.md">https://github.com/msgpack/msgpack/blob/master/spec.md</a></p>