anchor.diff:  (defgeneric read-response (con)
     (:documentation "Read and unmarshall an RPC response from CON.")
     (:method ((con rpc-connection))
  -    (unmarshall-response (recv-string (usocket:socket-stream (socket con))))))
  +    (let* ((stream (usocket:socket-stream (socket con)))
  +           (str (trivial-utf-8:utf-8-bytes-to-string
  +                 (cl-netstring+:read-netstring-data stream))))
  +      (unmarshall-response str))))
   
   (defgeneric send-request (con request &key flush)
     (:documentation "Marshall and send REQUEST over CON. If FLUSH is T, flush the output buffer.")
  
positive.code: ;; TODO: RPC method calls are returning a whole result structure, not
  ;; the data/throwing an error.
  
  ;; Utility funcs
  (declaim (inline has-key))
  (defun has-key (key map)
    (check-type map hash-table)
    (nth-value 1 (gethash key map)))
  
  (defclass rpc-connection ()
    ((address :initarg :address :accessor connection-address)
  
negative.code: ;; the stored condition (is it reasonable to re-throw the same
  ;; condition more than once? What if error handling has been done
  ;; in-between?).
  (declaim (ftype (function (rpc-connection id) rpc-result)
                  read-response-with-id))
  (defun read-result-with-id (con id)
    "Read responses from CON, storing results until a request containing
  a response with id ID arrives. Will process all results in a response
  