Module: A2A::Streaming::SseParser
- Defined in:
- lib/a2a/streaming/sse_parser.rb
Class Method Summary collapse
-
.each(io, &block) ⇒ Object
Parses a stream of SSE lines, yielding one Streaming::Response per logical event (blank-line delimited, multi-line data: concatenated).
Class Method Details
.each(io, &block) ⇒ Object
Parses a stream of SSE lines, yielding one Streaming::Response per logical event (blank-line delimited, multi-line data: concatenated).
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/a2a/streaming/sse_parser.rb', line 10 def self.each(io, &block) buffer = +"" io.each_line do |line| line = line.chomp if line.empty? emit(buffer, &block) unless buffer.empty? buffer = +"" elsif line.start_with?("data:") # SSE spec: multiple data: lines are concatenated with U+000A buffer << "\n" unless buffer.empty? buffer << line.delete_prefix("data:").lstrip end # skip comment lines (":"), "event:", "id:", "retry:" fields end emit(buffer, &block) unless buffer.empty? end |