remove my patch stuff
This commit is contained in:
parent
3a0a83e32e
commit
0a09ed2091
|
@ -35,120 +35,3 @@ type about struct {
|
||||||
IsScoringPlay bool
|
IsScoringPlay bool
|
||||||
CaptivatingIndex json.Number
|
CaptivatingIndex json.Number
|
||||||
}
|
}
|
||||||
|
|
||||||
func expand(arr []any, idx int) []any {
|
|
||||||
var all []any
|
|
||||||
if idx < len(arr) {
|
|
||||||
all = arr
|
|
||||||
} else {
|
|
||||||
all = make([]any, idx+1)
|
|
||||||
copy(all[:len(arr)], arr)
|
|
||||||
all[idx] = make(map[string]any)
|
|
||||||
}
|
|
||||||
return all
|
|
||||||
}
|
|
||||||
|
|
||||||
func setLeaf(obj any, key string, value any) error {
|
|
||||||
var err error
|
|
||||||
switch v := obj.(type) {
|
|
||||||
case map[string]any:
|
|
||||||
log.Println("Formerly", v[key])
|
|
||||||
v[key] = value
|
|
||||||
log.Println("Now", v[key])
|
|
||||||
case []any:
|
|
||||||
idx, err := strconv.Atoi(key)
|
|
||||||
if err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
v = expand(v, idx)
|
|
||||||
log.Println("Formerly", v[idx])
|
|
||||||
v[idx] = value
|
|
||||||
log.Println("Now", v[idx])
|
|
||||||
default:
|
|
||||||
err = errors.New("couldn't determine type")
|
|
||||||
}
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func getLeaf(key string, obj any) (any, error) {
|
|
||||||
switch v := obj.(type) {
|
|
||||||
case map[string]any:
|
|
||||||
val, ok := v[key]
|
|
||||||
if !ok {
|
|
||||||
return nil, errors.New("invalid key")
|
|
||||||
}
|
|
||||||
return val, nil
|
|
||||||
case []any:
|
|
||||||
idx, err := strconv.Atoi(key)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if idx < 0 || idx >= len(v) {
|
|
||||||
return nil, errors.New("invalid index")
|
|
||||||
}
|
|
||||||
|
|
||||||
return v[idx], nil
|
|
||||||
default:
|
|
||||||
return nil, errors.New("couldn't determine type")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func set(path string, obj any, value any) error {
|
|
||||||
elems := strings.Split(path, "/")
|
|
||||||
leaf := elems[len(elems)-1]
|
|
||||||
leafPath := strings.Join(elems[:len(elems)-1], "/")
|
|
||||||
|
|
||||||
parent, err := get(leafPath, obj)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = setLeaf(parent, leaf, value)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func get(path string, obj any) (any, error) {
|
|
||||||
var err error
|
|
||||||
first, rest, found := strings.Cut(path, "/")
|
|
||||||
log.Println(first, rest)
|
|
||||||
if !found {
|
|
||||||
return getLeaf(first, obj)
|
|
||||||
} else if first == "" {
|
|
||||||
return get(rest, obj)
|
|
||||||
}
|
|
||||||
|
|
||||||
switch v := obj.(type) {
|
|
||||||
case map[string]any:
|
|
||||||
val, ok := v[first]
|
|
||||||
if !ok {
|
|
||||||
return v, errors.New("invalid key")
|
|
||||||
}
|
|
||||||
return get(rest, val)
|
|
||||||
case []any:
|
|
||||||
idx, err := strconv.Atoi(first)
|
|
||||||
if err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if idx < 0 || idx >= len(v) {
|
|
||||||
return v, errors.New("invalid index")
|
|
||||||
}
|
|
||||||
|
|
||||||
return get(rest, v[idx])
|
|
||||||
default:
|
|
||||||
err = errors.New("couldn't determine type")
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FeedResponse) Patch(instr *instruction) error {
|
|
||||||
// TODO: need to handle each type of instruction separately: add,
|
|
||||||
// replace, remove, copy, move
|
|
||||||
log.Println("updating", instr.Path)
|
|
||||||
err := set(instr.Path, map[string]any(*f), instr.Value)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
|
@ -5,16 +5,3 @@ type DiffPatchParams struct {
|
||||||
StartTimecode string
|
StartTimecode string
|
||||||
PushUpdateId string
|
PushUpdateId string
|
||||||
}
|
}
|
||||||
|
|
||||||
type DiffPatchResponse []Patch
|
|
||||||
|
|
||||||
type Patch struct {
|
|
||||||
Diff []instruction
|
|
||||||
}
|
|
||||||
|
|
||||||
type instruction struct {
|
|
||||||
Op string
|
|
||||||
Path string
|
|
||||||
Value any
|
|
||||||
From string
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue