webtools/cmds/timestamps/input.go

36 lines
728 B
Go

package main
import (
"time"
"github.com/alecthomas/participle/v2"
"github.com/alecthomas/participle/v2/lexer"
)
var basicLexer = lexer.MustSimple([]lexer.SimpleRule{
{"Identifier", `[a-zA-Z_][a-zA-Z0-9_]*`},
{"Date", `\d{4}-\d{2}-\d{2}`},
{"Timestamp", `\d{4}-\d{2}-\d{2}T?\d{2}:\d{2}:\d{2}Z?`},
{"Time", `\d{2}:\d{2}:\d{2}Z?`},
{"Int", `\d+`},
{"Whitespace", `[ ]+`},
})
var parser = participle.MustBuild[Atom](
participle.Lexer(basicLexer),
participle.Elide("Whitespace"),
)
func Parse(expr string) (TimeResult, error) {
res, err := parser.ParseString("expr", expr)
if err != nil {
return nil, err
}
return res, nil
}
type TimeResult interface {
Time() (time.Time, error)
RequiresRefreshing() bool
}