func readModRoute(s *toki.Scanner, table *tbl.Table) error { t := s.Next() if t.Token != word { return errFmtAddRoute } key := string(t.Value) opts := make(map[string]string) for t.Token != toki.EOF { t = s.Next() switch t.Token { case toki.EOF: break case optPrefix: if t = s.Next(); t.Token != word { return errFmtModDest } opts["prefix"] = string(t.Value) case optSub: if t = s.Next(); t.Token != word { return errFmtModDest } opts["sub"] = string(t.Value) case optRegex: if t = s.Next(); t.Token != word { return errFmtModDest } opts["regex"] = string(t.Value) default: return errFmtModDest } } if len(opts) == 0 { return errors.New("modRoute needs at least 1 option") } return table.UpdateRoute(key, opts) }