go-footballdata/event_types.go

62 lines
1.3 KiB
Go
Raw Normal View History

2016-06-14 12:57:13 +00:00
package footballdata
import (
"fmt"
"strings"
"time"
)
// Contains information about a soccerseason update sent to us by the Event API.
type SoccerSeasonUpdate struct {
Timestamp time.Time
Resource string
Id uint64
URI string
Updates UpdateDescriptor
}
type FieldUpdateValues struct {
OldValue string
NewValue string
}
func (v FieldUpdateValues) String() string {
return fmt.Sprintf("%s -> %s", v.OldValue, v.NewValue)
}
type FieldUpdate struct {
Name string
Values *FieldUpdateValues
}
func (v FieldUpdate) String() string {
r := []string{v.Name}
if v.Values != nil {
r = append(r, v.Values.String())
}
return strings.Join(r, "|")
}
type UpdateDescriptor string
func (d UpdateDescriptor) Fields() (retval []FieldUpdate) {
// (FIELD_NAME|OLD_VALUE -> NEW_VALUE)(;($1))?
retval = []FieldUpdate{}
fieldStrs := strings.Split(string(d), ";")
for _, fieldStr := range fieldStrs {
field := FieldUpdate{}
fieldStrSplit := strings.SplitN(fieldStr, "|", 2)
field.Name = fieldStrSplit[0]
if len(fieldStrSplit) > 1 {
// OLD_VALUE -> NEW_VALUE
valueSplit := strings.Split(fieldStrSplit[1], " -> ")
field.Values = &FieldUpdateValues{
OldValue: valueSplit[0],
NewValue: valueSplit[1],
}
}
retval = append(retval, field)
}
return
}