WIP. TODO: Message validation, pushing valid messages into result arrray

This commit is contained in:
Netscape Navigator 2020-10-08 08:06:46 -05:00
parent c440448640
commit e594967250
1 changed files with 22 additions and 4 deletions

View File

@ -2,7 +2,7 @@ package main
import ( import (
"bufio" "bufio"
"errors" "fmt"
"strconv" "strconv"
"strings" "strings"
) )
@ -29,6 +29,7 @@ const (
parsingBody parserMode = iota parsingBody parserMode = iota
parsingFooter parserMode = iota parsingFooter parserMode = iota
parsingDone parserMode = iota parsingDone parserMode = iota
parsingError parserMode = iota
) )
type parserState struct { type parserState struct {
@ -36,6 +37,7 @@ type parserState struct {
scanner *bufio.Scanner scanner *bufio.Scanner
buffer pigeonMessage buffer pigeonMessage
results []pigeonMessage results []pigeonMessage
error error
} }
func newState(message string) parserState { func newState(message string) parserState {
@ -47,18 +49,24 @@ func newState(message string) parserState {
func parseMessage(message string) ([]pigeonMessage, error) { func parseMessage(message string) ([]pigeonMessage, error) {
state := newState(message) state := newState(message)
for state.scanner.Scan() { for state.scanner.Scan() {
switch state.mode { switch state.mode {
case parsingDone:
maybeContinue(&state)
case parsingHeader: case parsingHeader:
parseHeader(&state) parseHeader(&state)
case parsingBody: case parsingBody:
parseBody(&state) parseBody(&state)
case parsingFooter: case parsingFooter:
parseFooter(&state) parseFooter(&state)
case parsingError:
break
} }
} }
return []pigeonMessage{}, errors.New("whatever") if state.mode == parsingError {
return []pigeonMessage{}, state.error
}
return state.results, nil
} }
func parseHeader(state *parserState) { func parseHeader(state *parserState) {
@ -107,5 +115,15 @@ func parseBody(state *parserState) {
} }
func parseFooter(state *parserState) { func parseFooter(state *parserState) {
panic("=== STOPPED HERE") t1 := state.scanner.Text()
state.mode = parsingDone
fmt.Printf("TODO Real message validation: %s\n", t1)
}
func maybeContinue(state *parserState) {
t1 := state.scanner.Text()
if t1 == "" {
state.mode = parsingHeader
}
} }