remove my patch stuff

This commit is contained in:
filifa 2024-07-13 15:32:50 -05:00
parent 3a0a83e32e
commit 0a09ed2091
2 changed files with 0 additions and 130 deletions

View File

@ -35,120 +35,3 @@ type about struct {
IsScoringPlay bool
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
}

View File

@ -5,16 +5,3 @@ type DiffPatchParams struct {
StartTimecode string
PushUpdateId string
}
type DiffPatchResponse []Patch
type Patch struct {
Diff []instruction
}
type instruction struct {
Op string
Path string
Value any
From string
}