MCPcopy
hub / github.com/h2oai/wave / set

Method set

card.go:99–143  ·  view source on GitHub ↗
(ks []string, v any)

Source from the content-addressed store, hash-verified

97}
98
99func (c *Card) set(ks []string, v any) {
100 switch len(ks) {
101 case 0: // should not get here; outer interpreter loop will clobber this card.
102 return
103 case 1: // .foo = bar
104 p := ks[0]
105 if ib, ok := c.data[p]; ok { // TODO can optimize by duplicating all bufs in a card.bufs map
106 if b, ok := ib.(Buf); ok { // avoid clobbering buffers; overwrite instead.
107 b.put(v)
108 return
109 }
110 }
111
112 keys := strings.Split(p, ".")
113 var x any = c.data
114 // Get the object even if nested.
115 for _, key := range keys[:len(keys)-1] {
116 x = get(x, key)
117 }
118
119 if x, ok := x.(map[string]any); ok {
120 lastKey := keys[len(keys)-1]
121 if v == nil {
122 delete(x, lastKey)
123 } else {
124 x[lastKey] = v
125 }
126 }
127 default: // .foo.bar.baz = qux
128 var x any = c.data
129
130 startIdx := 0
131 if _, ok := c.data[ks[0]]; !ok && c.nameComponentMap[ks[0]] != nil {
132 // By-name access.
133 x = c.nameComponentMap[ks[0]]
134 startIdx = 1
135 }
136 for _, k := range ks[startIdx : len(ks)-1] {
137 x = get(x, k)
138 }
139
140 p := ks[len(ks)-1]
141 set(x, p, v)
142 }
143}
144
145func set(ix any, k string, v any) {
146 switch x := ix.(type) {

Callers 1

loadCardFunction · 0.95

Calls 3

getFunction · 0.70
setFunction · 0.70
putMethod · 0.65

Tested by

no test coverage detected