class Protocol::Rack::Body::Streaming::Output
def close(error = nil)
def close(error = nil) @fiber = nil if from = @from @from = nil if error from.raise(error) else from.transfer(nil) end end end
def close_write(error = nil)
def close_write(error = nil) close(error) end
def initialize(input, block)
def initialize(input, block) stream = ::Protocol::HTTP::Body::Stream.new(input, self) @from = nil @fiber = Fiber.new do |from| @from = from block.call(stream) @fiber = nil end end
def read
def read raise RuntimeError, "Stream is already being read!" if @from @fiber&.transfer(Fiber.current) end
def write(chunk)
def write(chunk) if from = @from @from = nil @from = from.transfer(chunk) else raise RuntimeError, "Stream is not being read!" end end