@@ -8,6 +8,14 @@ import (
88 "fmt"
99)
1010
11+ type ObjectKeyDeleter interface {
12+ DeleteObjectKey (name string ) (any , error )
13+ }
14+
15+ type VectorItemDeleter interface {
16+ DeleteVectorItem (index int ) (any , error )
17+ }
18+
1119func removeSliceItem (slice []any , index int ) []any {
1220 return append (slice [:index ], slice [index + 1 :]... )
1321}
@@ -24,18 +32,18 @@ func Delete(dest any, path Path) (any, error) {
2432 if len (remainingSteps ) == 0 {
2533 // [index]
2634 if index , ok := toIntegerStep (thisStep ); ok {
27- if index < 0 {
28- return nil , fmt .Errorf ("index %d out of bounds" , index )
29- }
30-
3135 if slice , ok := dest .([]any ); ok {
32- if index >= len (slice ) {
36+ if index < 0 || index >= len (slice ) {
3337 return nil , fmt .Errorf ("index %d out of bounds" , index )
3438 }
3539
3640 return removeSliceItem (slice , index ), nil
3741 }
3842
43+ if deleter , ok := dest .(VectorItemDeleter ); ok {
44+ return deleter .DeleteVectorItem (index )
45+ }
46+
3947 return nil , fmt .Errorf ("cannot delete index from %T" , dest )
4048 }
4149
@@ -46,6 +54,10 @@ func Delete(dest any, path Path) (any, error) {
4654 return object , nil
4755 }
4856
57+ if deleter , ok := dest .(ObjectKeyDeleter ); ok {
58+ return deleter .DeleteObjectKey (key )
59+ }
60+
4961 return nil , fmt .Errorf ("cannot delete key from %T" , dest )
5062 }
5163
@@ -54,12 +66,8 @@ func Delete(dest any, path Path) (any, error) {
5466
5567 // [index]...
5668 if index , ok := toIntegerStep (thisStep ); ok {
57- if index < 0 {
58- return nil , fmt .Errorf ("index %d out of bounds" , index )
59- }
60-
6169 if slice , ok := dest .([]any ); ok {
62- if index >= len (slice ) {
70+ if index < 0 || index >= len (slice ) {
6371 return nil , fmt .Errorf ("index %d out of bounds" , index )
6472 }
6573
@@ -75,6 +83,20 @@ func Delete(dest any, path Path) (any, error) {
7583 return slice , nil
7684 }
7785
86+ if writer , ok := dest .(VectorWriter ); ok {
87+ existingValue , err := writer .GetVectorItem (index )
88+ if err != nil {
89+ return nil , fmt .Errorf ("cannot descend with [%d] into %T" , index , dest )
90+ }
91+
92+ updatedValue , err := Delete (existingValue , remainingSteps )
93+ if err != nil {
94+ return nil , err
95+ }
96+
97+ return writer .SetVectorItem (index , updatedValue )
98+ }
99+
78100 return nil , fmt .Errorf ("cannot descend with [%d] into %T" , index , dest )
79101 }
80102
@@ -94,6 +116,20 @@ func Delete(dest any, path Path) (any, error) {
94116 return object , nil
95117 }
96118
119+ if writer , ok := dest .(ObjectWriter ); ok {
120+ existingValue , err := writer .GetObjectKey (key )
121+ if err != nil {
122+ return nil , fmt .Errorf ("cannot descend with [%s] into %T" , key , dest )
123+ }
124+
125+ updatedValue , err := Delete (existingValue , remainingSteps )
126+ if err != nil {
127+ return nil , err
128+ }
129+
130+ return writer .SetObjectKey (key , updatedValue )
131+ }
132+
97133 return nil , fmt .Errorf ("cannot descend with [%s] into %T" , key , dest )
98134 }
99135
0 commit comments