The structured types exist to give values that could be expressed with
[Dict]s and [List]s a known structure and meaning that tools / scripts
can rely on. The number of these types is kept low to improve reuseability.
They are useful to force tools / scripts to decide on one specific structure
and to increase compatibility. They also increase maintenance burden, which
means that for niche applications it is preferred that tool + script agree
on a structure and use dynamic types instead of extending the toolapi.
Returned by the tool in the final result() call as reason if no value was computed.
It is seriazable since it is the only error that ist actually sent over the WebSocket connection.