module Protocol::HTTP2::Continued

def continued?

def continued?
	!!@continuation
end

def end_headers?

def end_headers?
	flag_set?(END_HEADERS)
end

def initialize(*)

def initialize(*)
	super
	
	@continuation = nil
end

def pack(data, **options)

def pack(data, **options)
	maximum_size = options[:maximum_size]
	
	if maximum_size and data.bytesize > maximum_size
		clear_flags(END_HEADERS)
		
		super(data.byteslice(0, maximum_size), **options)
		
		remainder = data.byteslice(maximum_size, data.bytesize-maximum_size)
		
		@continuation = ContinuationFrame.new
		@continuation.pack(remainder, maximum_size: maximum_size)
	else
		set_flags(END_HEADERS)
		
		super data, **options
		
		@continuation = nil
	end
end

def read(stream, maximum_frame_size)

def read(stream, maximum_frame_size)
	super
	
	unless end_headers?
		continuation = ContinuationFrame.new
		continuation.read_header(stream)
		
		# We validate the frame type here:
		unless continuation.valid_type?
			raise ProtocolError, "Invalid frame type: #{@type}!"
		end
		
		if continuation.stream_id != @stream_id
			raise ProtocolError, "Invalid stream id: #{continuation.stream_id} for continuation of stream id: #{@stream_id}!"
		end
		
		continuation.read(stream, maximum_frame_size)
		
		@continuation = continuation
	end
end

def unpack

def unpack
	if @continuation.nil?
		super
	else
		super + @continuation.unpack
	end
end

def write(stream)

def write(stream)
	super
	
	if continuation = self.continuation
		continuation.write(stream)
	end
end