def stdin_pump

cswap-bend-cli@0.1.0.0 · server.bend:66

import cswap-bend-cli@0.1.0.0/server.bend as Server
import Base
import cswap-bend-cli@0.1.0.0/fs.bend as Fs
import cswap-bend-cli@0.1.0.0/frame.bend as Fr
import cswap-bend-cli@0.1.0.0/rpc.bend as Rpc
import cswap-bend-cli@0.1.0.0/fmt/out.bend as O

66@unsafe def stdin_pump(p: SP, +fmt: O.Fmt) -> IO(Unit):
67  match p:
68    case SRead{f, buf}:
69      IO.bind(File & Fs.Res(String), Unit, File.read(f, chunk()), r => stdin_pump(after_read(r, buf), fmt))
70    case SFrames{f, +buf}:
71      stdin_pump(s_cut(Fr.take(Rpc.is_block(fmt), buf), f, buf), fmt)
72    case SHandle{f, msg, rest}:
73      IO.bind(String, Unit, Rpc.handle(fmt, msg), resp => IO.bind(Unit, Unit, IO.write(resp), u => stdin_pump(SFrames{f, rest}, fmt)))
74    case STail{f, +buf}:
75      stdin_pump(s_tail(Fr.blank(buf), f, buf), fmt)
76    case SDone{f}:
77      File.close(f)

Uses (20)

Used by (1)