class Protocol::HTTP::Body::Inflate

def self.for(body, encoding = GZIP)

def self.for(body, encoding = GZIP)
	self.new(body, Zlib::Inflate.new(encoding))
end

def read

def read
	if stream = @stream
		# Read from the underlying stream and inflate it:
		while chunk = super
			@input_length += chunk.bytesize
			
			# It's possible this triggers the stream to finish.
			chunk = stream.inflate(chunk)
			
			break unless chunk&.empty?
		end
	
		if chunk
			@output_length += chunk.bytesize
		elsif !stream.closed?
			chunk = stream.finish
			@output_length += chunk.bytesize
		end
		
		# If the stream is finished, we need to close it and potentially return nil:
		if stream.finished?
			@stream = nil
			stream.close
			
			while super
				# There is data left in the stream, so we need to keep reading until it's all consumed.
			end
			
			if chunk.empty?
				return nil
			end
		end
		
		return chunk
	end
end