docs: public static ServiceMessage decodeData(ServiceMessage message, Class<?> dataType)
        throws MessageCodecException {
      if (dataType == null
          || !message.hasData(ByteBuf.class)
          || ((ByteBuf) message.data()).readableBytes() == 0) {
        return message;
      }
  
      Object data;
      Class<?> targetType = message.isError() ? ErrorData.class : dataType;
  
      ByteBuf dataBuffer = message.data();
      try (ByteBufInputStream inputStream = new ByteBufInputStream(dataBuffer, true)) {
        DataCodec dataCodec = DataCodec.getInstance(message.dataFormatOrDefault());
        data = dataCodec.decode(inputStream, targetType);
      } catch (Throwable ex) {
        throw new MessageCodecException(
            "Failed to decode data on message q=" + message.qualifier(), ex);
      }
  
      return ServiceMessage.from(message).data(data).build();
    }