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