65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package item
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
)
|
|
|
|
type ScheduleBody struct {
|
|
Title string `json:"title"`
|
|
}
|
|
|
|
type Schedule struct {
|
|
ID string `json:"id"`
|
|
Date Date `json:"date"`
|
|
Recurrer Recurrer `json:"recurrer"`
|
|
RecurNext Date `json:"recurNext"`
|
|
ScheduleBody
|
|
}
|
|
|
|
func NewSchedule(i Item) (Schedule, error) {
|
|
if i.Kind != KindSchedule {
|
|
return Schedule{}, ErrInvalidKind
|
|
}
|
|
|
|
var s Schedule
|
|
if err := json.Unmarshal([]byte(i.Body), &s); err != nil {
|
|
return Schedule{}, fmt.Errorf("could not unmarshal item body: %v", err)
|
|
}
|
|
|
|
s.ID = i.ID
|
|
s.Date = i.Date
|
|
|
|
return s, nil
|
|
}
|
|
|
|
func (s Schedule) Item() (Item, error) {
|
|
body, err := json.Marshal(s.ScheduleBody)
|
|
if err != nil {
|
|
return Item{}, fmt.Errorf("could not marshal schedule body: %v", err)
|
|
}
|
|
|
|
return Item{
|
|
ID: s.ID,
|
|
Kind: KindSchedule,
|
|
Date: s.Date,
|
|
Body: string(body),
|
|
}, nil
|
|
}
|
|
|
|
func ScheduleDiff(a, b Schedule) string {
|
|
aJSON, _ := json.Marshal(a)
|
|
bJSON, _ := json.Marshal(b)
|
|
|
|
return cmp.Diff(string(aJSON), string(bJSON))
|
|
}
|
|
|
|
func ScheduleDiffs(a, b []Schedule) string {
|
|
aJSON, _ := json.Marshal(a)
|
|
bJSON, _ := json.Marshal(b)
|
|
|
|
return cmp.Diff(string(aJSON), string(bJSON))
|
|
}
|