diff options
Diffstat (limited to 'model.go')
-rw-r--r-- | model.go | 59 |
1 files changed, 55 insertions, 4 deletions
@@ -1,11 +1,62 @@ package main -import "time" +import ( + "errors" + "regexp" + "time" +) -type Task struct { +type Entry struct { Id int - From *time.Time - To *time.Time + Date time.Time + From *Time + To *Time Tag *string Comment string } + +type Date string + +type Time string + +var timeMatch = regexp.MustCompile("\\d\\d:\\d\\d") +var dateMatch = regexp.MustCompile("\\d\\d\\d\\d-\\d\\d-\\d\\d") + +var ( + ErrInvalidTime = errors.New("Invalid time string") + ErrInvalidDate = errors.New("Invalid date string") +) + +func TimeFromStd(time time.Time) Time { + return Time(time.Format("15:04")) +} + +func TimeFromString(str string) (*Time, error) { + if str == "" { + return nil, nil + } + + matched := timeMatch.MatchString(str) + if !matched { + return nil, ErrInvalidTime + } + time := Time(str) + return &time, nil +} + +func DateFromStd(time time.Time) Date { + return Date(time.Format("2006-01-02")) +} + +func DateFromString(str string) (*Date, error) { + if str == "" { + return nil, nil + } + + matched := dateMatch.MatchString(str) + if !matched { + return nil, ErrInvalidTime + } + date := Date(str) + return &date, nil +} |