[minor] Only run the decoder if the passed data is actually an string
[minor] Allow async incoming message parsing
[minor] Better code-reuse for outgoing message parsing