62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
|
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
|
||
|
}
|