| 77 | } |
| 78 | |
| 79 | func (p *inputParser) parseEvent(line string) (inputEvent, error) { |
| 80 | if line = strings.TrimSpace(line); line == "" { |
| 81 | return inputEvent{}, nil |
| 82 | } |
| 83 | |
| 84 | if p.readingPayload { |
| 85 | return p.handlePayloadLine(line) |
| 86 | } |
| 87 | |
| 88 | switch { |
| 89 | case line == lineQuit: |
| 90 | return inputEvent{kind: inputEventQuit}, nil |
| 91 | case hasLinePrefix(line, lineFunctionCancel): |
| 92 | return parseCancelEvent(line) |
| 93 | case hasLinePrefix(line, lineFunctionProgress): |
| 94 | return parseProgressEvent(line), nil |
| 95 | case strings.HasPrefix(line, lineFunction+" "): |
| 96 | fn, err := p.parseFunction(line) |
| 97 | if err != nil { |
| 98 | return inputEvent{}, err |
| 99 | } |
| 100 | return inputEvent{kind: inputEventCall, fn: fn}, nil |
| 101 | case strings.HasPrefix(line, lineFunctionPayload+" "): |
| 102 | fn, err := p.parseFunction(line) |
| 103 | if err != nil { |
| 104 | return inputEvent{}, err |
| 105 | } |
| 106 | p.readingPayload = true |
| 107 | p.currentFn = fn |
| 108 | p.payloadBuf.Reset() |
| 109 | return inputEvent{}, nil |
| 110 | default: |
| 111 | return inputEvent{}, errors.New("unexpected line format") |
| 112 | } |
| 113 | } |
| 114 | |
| 115 | func (p *inputParser) handlePayloadLine(line string) (inputEvent, error) { |
| 116 | if line == lineFunctionPayloadEnd { |