Commits

Moritz Heidkamp  committed 406c418

implement siphon-input-port

  • Participants
  • Parent commits 2ff47aa

Comments (0)

Files changed (2)

 (make-channel
  ;; derivators
  fork-channel fold-channel map-channel filter-channel
- siphon-channel
+ siphon-channel siphon-input-port
 
  ;; operations
  channel-enqueue channel-receive channel-receive/delay
      (when (pred? message)
        (channel-enqueue filtering-channel message)))))
 
+(define (siphon-input-port port read #!optional (channel (make-channel)))
+  (values (lambda ()
+            (let ((message (read port)))
+              (and (not (eof-object? message))
+                   (channel-enqueue channel message))))
+          channel))
+
 )

File tests/run.scm

   (define p3 (channel-receive/delay c 0.5))
   (test-assert (not (force p3))))
 
+(test-group "siphon-input-port"
+  (define port (open-input-string "this is a test"))
+  (define-values (next channel) 
+    (siphon-input-port port read))
+
+  (let loop ()
+    (when (next)
+      (loop)))
+
+  (test '(this is a test) (channel-messages channel)))
+
 (test-end)
 
 (test-exit)