Sha256: acbe870fbde7a30e1b3b1c453f9955e346cd8dcbbd7232b28ff1d76f0d79ae3f

Contents?: true

Size: 1.05 KB

Versions: 3

Compression:

Stored size: 1.05 KB

Contents

module DAP::Encoding
  CONTENT_LENGTH_HEADER = 'Content-Length'

  def self.decode(s)
    headers = {}

    loop do
      l = s.gets
      raise EOFError if l.nil?

      l = l.strip
      break if l.empty?

      name, value = l.split(':', 2)
      raise "Invalid header '#{l}'" unless value

      headers[name.strip] = value.strip
    end

    raise "No headers" unless headers.size
    raise "Missing content length" unless headers.key?(CONTENT_LENGTH_HEADER)

    cl = headers[CONTENT_LENGTH_HEADER].to_i
    raise "Invalid content length" unless cl.to_s == headers[CONTENT_LENGTH_HEADER]

    body = s.read(cl)
    values = JSON.parse(body)
    DAP::ProtocolMessage.from(values)
  end

  def self.encode(message)
    raise "Body must be a protocol message" unless message.is_a? DAP::ProtocolMessage

    headers = {}

    body = JSON.dump(message.to_wire)
    headers[CONTENT_LENGTH_HEADER] = body.size

    headers.map { |name, value| "#{name}: #{value}\r\n" }.join + "\r\n" + body
  end

  def self.decode_all(s)
    loop do
      yield decode(s)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ruby-dap-0.1.2 lib/dap/encoding.rb
ruby-dap-0.1.1 lib/dap/encoding.rb
ruby-dap-0.1.0 lib/dap/encoding.rb