in apt/message_reader.go [40:75]
func (r *MessageReader) ReadMessage(ctx context.Context) (*Message, error) {
for {
select {
case <-ctx.Done():
return nil, ctx.Err()
default:
}
line, err := r.reader.ReadString('\n')
if err != nil {
return nil, err
}
line = strings.TrimSpace(line)
if line == "" {
if r.message == nil {
return nil, errEmptyMessage
}
// Message is done, return and reset.
msg := r.message
r.message = nil
return msg, nil
}
if r.message == nil {
r.message = &Message{}
if err := r.parseHeader(line); err != nil {
return nil, err
}
} else {
if err := r.parseField(line); err != nil {
return nil, err
}
}
}
}