package peerfinder import ( "bytes" "github.com/tj/go-semver" "go.sour.is/ev/event" ) type Info struct { ScriptVersion string `json:"script_version"` event.IsAggregate } var _ event.Aggregate = (*Info)(nil) func (a *Info) ApplyEvent(lis ...event.Event) { for _, e := range lis { switch e := e.(type) { case *VersionChanged: a.ScriptVersion = e.ScriptVersion } } } func (a *Info) MarshalEnviron() ([]byte, error) { var b bytes.Buffer b.WriteString("SCRIPT_VERSION=") b.WriteString(a.ScriptVersion) b.WriteRune('\n') return b.Bytes(), nil } func (a *Info) OnUpsert() error { if a.StreamVersion() == 0 { event.Raise(a, &VersionChanged{ScriptVersion: initVersion}) } current, _ := semver.Parse(initVersion) previous, _ := semver.Parse(a.ScriptVersion) if current.Compare(previous) > 0 { event.Raise(a, &VersionChanged{ScriptVersion: initVersion}) } return nil } type VersionChanged struct { ScriptVersion string `json:"script_version"` event.IsEvent } var _ event.Event = (*VersionChanged)(nil)