func()

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
			}
		}
	}
}