MCPcopy Create free account
hub / github.com/CovenantSQL/CovenantSQL / nestedWalkFillTxNonce

Function nestedWalkFillTxNonce

cmd/cql/internal/rpc.go:235–293  ·  view source on GitHub ↗
(rv reflect.Value, fieldPath string, signCallback func(fieldPath string, rv reflect.Value) (err error))

Source from the content-addressed store, hash-verified

233}
234
235func nestedWalkFillTxNonce(rv reflect.Value, fieldPath string, signCallback func(fieldPath string, rv reflect.Value) (err error)) (signed bool, err error) {
236 rv = reflect.Indirect(rv)
237
238 switch rv.Kind() {
239 case reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Float32,
240 reflect.Float64, reflect.Complex64, reflect.Complex128, reflect.Chan, reflect.Interface, reflect.Ptr,
241 reflect.String, reflect.UnsafePointer, reflect.Func:
242 return
243 case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
244 if _, ok := rv.Interface().(pi.AccountNonce); ok {
245 if err = signCallback(fieldPath, rv); err != nil {
246 return
247 }
248 return true, nil
249 }
250 case reflect.Array, reflect.Slice:
251 for i := 0; i != rv.Len(); i++ {
252 fieldName := fieldPath
253 if fieldPath != "" {
254 fieldName += "."
255 }
256 fieldName += fmt.Sprintf("[%d]", i)
257 if signed, err = nestedWalkFillTxNonce(rv.Index(i), fieldName, signCallback); err != nil || signed {
258 return
259 }
260 }
261 case reflect.Map:
262 for _, k := range rv.MapKeys() {
263 fieldName := fieldPath
264 if fieldPath != "" {
265 fieldName += "."
266 }
267 fieldName += fmt.Sprintf("[%v]", k)
268 if signed, err = nestedWalkFillTxNonce(rv.MapIndex(k), fieldName, signCallback); err != nil || signed {
269 return
270 }
271 }
272 case reflect.Struct:
273 for i := 0; i != rv.NumField(); i++ {
274 // walk inside
275 fieldName := fieldPath
276 if fieldPath != "" {
277 fieldName += "."
278 }
279 fieldName += rv.Type().Field(i).Name
280
281 if _, ok := rv.Field(i).Interface().(pi.AccountNonce); ok {
282 if err = signCallback(fieldName, rv.Field(i)); err != nil {
283 return
284 }
285 return true, nil
286 } else if signed, err = nestedWalkFillTxNonce(rv.Field(i), fieldName, signCallback); err != nil || signed {
287 return
288 }
289 }
290 }
291
292 return

Callers 1

fillTxNonceFunction · 0.85

Calls 1

LenMethod · 0.45

Tested by

no test coverage detected