# File lib/neovim/session/rpc.rb, line 45
      def run(&callback)
        @serializer.run do |msg|
          debug("received #{msg.inspect}")
          kind, *payload = msg

          case kind
          when 0
            handle_request(payload, callback)
          when 1
            handle_response(payload)
          when 2
            handle_notification(payload, callback)
          end
        end
      rescue => e
        fatal("got unexpected error #{e.inspect}")
        debug(e.backtrace.join("\n"))
      end