I'm a bit confused about what's happening here. If none of the decoders succeeds, then we're changing the message type and then are re-routing the message back through the same MultiDecoder. It seems to me that in most cases this would cause an infinite loop.

In general, the "catch-all" idea is a good one, but it gets more complicated if we introduce the ability to run all decoders, instead of stopping at the first success. I'm thinking that for now we should maybe just remove this feature. Users can do it themselves with a custom decoder for now, we can work out if there's a reasonable way to do it for them later.