treerack/parse.go

55 lines
930 B
Go
Raw Normal View History

2017-07-15 21:49:08 +02:00
package treerack
2017-06-25 17:51:08 +02:00
2017-06-25 23:38:32 +02:00
import "fmt"
2017-06-25 17:51:08 +02:00
type definition interface {
nodeName() string
2017-07-15 21:49:08 +02:00
nodeID() int
setID(int)
2017-07-15 22:12:01 +02:00
parser(*registry, *idSet) (parser, error)
2017-06-25 17:51:08 +02:00
commitType() CommitType
}
type parser interface {
nodeName() string
2017-07-15 21:49:08 +02:00
nodeID() int
2017-07-15 22:12:01 +02:00
setIncludedBy(parser, *idSet)
2017-06-26 02:20:23 +02:00
storeIncluded(*context, *Node)
2017-06-25 17:51:08 +02:00
parse(Trace, *context)
}
func parserNotFound(name string) error {
return fmt.Errorf("parser not found: %s", name)
}
2017-06-25 23:38:32 +02:00
func cannotIncludeParsers(name string) error {
return fmt.Errorf("parser: %s cannot include other parsers", name)
}
2017-07-15 21:49:08 +02:00
func stringsContainDeprecated(ss []string, s string) bool {
2017-06-25 17:51:08 +02:00
for _, si := range ss {
if si == s {
return true
}
}
return false
}
func parse(t Trace, p parser, c *context) (*Node, error) {
p.parse(t, c)
if c.readErr != nil {
return nil, c.readErr
}
if !c.match {
return nil, ErrInvalidInput
}
if err := c.finalize(); err != nil {
return nil, err
}
return c.node, nil
}