inferior: Add 'read-repl-response'.

* guix/inferior.scm (read-repl-response): New procedure.
(read-inferior-response): Use it.
This commit is contained in:
Ludovic Courtès 2019-06-10 17:11:43 +02:00
parent 92a4087bf4
commit d0ffa321dd
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5

View File

@ -59,6 +59,7 @@
inferior-eval
inferior-eval-with-store
inferior-object?
read-repl-response
inferior-packages
inferior-available-packages
@ -183,7 +184,8 @@ equivalent. Return #f if the inferior could not be launched."
(set-record-type-printer! <inferior-object> write-inferior-object)
(define (read-inferior-response inferior)
(define (read-repl-response port)
"Read a (guix repl) response from PORT and return it as a Scheme object."
(define sexp->object
(match-lambda
(('value value)
@ -191,12 +193,15 @@ equivalent. Return #f if the inferior could not be launched."
(('non-self-quoting address string)
(inferior-object address string))))
(match (read (inferior-socket inferior))
(match (read port)
(('values objects ...)
(apply values (map sexp->object objects)))
(('exception key objects ...)
(apply throw key (map sexp->object objects)))))
(define (read-inferior-response inferior)
(read-repl-response (inferior-socket inferior)))
(define (send-inferior-request exp inferior)
(write exp (inferior-socket inferior))
(newline (inferior-socket inferior)))