MCPcopy Create free account
hub / github.com/segmentio/encoding / parseRewriteTemplateStruct

Function parseRewriteTemplateStruct

proto/rewrite.go:393–459  ·  view source on GitHub ↗
(t Type, f FieldNumber, j json.RawMessage, rules ...RewriterRules)

Source from the content-addressed store, hash-verified

391}
392
393func parseRewriteTemplateStruct(t Type, f FieldNumber, j json.RawMessage, rules ...RewriterRules) (Rewriter, error) {
394 template := map[string]json.RawMessage{}
395
396 if err := json.Unmarshal(j, &template); err != nil {
397 return nil, err
398 }
399
400 fieldsByName := map[string]Field{}
401
402 for i := range t.NumField() {
403 f := t.Field(i)
404 fieldsByName[f.Name] = f
405 }
406
407 message := MessageRewriter{}
408 rewriters := []Rewriter{}
409
410 for k, v := range template {
411 f, ok := fieldsByName[k]
412 if !ok {
413 return nil, fmt.Errorf("rewrite template contained an invalid field named %q", k)
414 }
415
416 var fields []json.RawMessage
417 if f.Repeated {
418 if err := json.Unmarshal(v, &fields); err != nil {
419 return nil, err
420 }
421 } else {
422 fields = []json.RawMessage{v}
423 }
424
425 var rule any
426 for i := range rules {
427 if r, ok := rules[i][f.Name]; ok {
428 rule = r
429 break
430 }
431 }
432
433 rewriters = rewriters[:0]
434
435 for _, v := range fields {
436 rw, err := parseRewriteTemplate(f.Type, f.Number, v, rule)
437 if err != nil {
438 return nil, fmt.Errorf("%s: %w", k, err)
439 }
440 if rw != nil {
441 rewriters = append(rewriters, rw)
442 }
443 }
444
445 if cap(message) <= int(f.Number) {
446 m := make(MessageRewriter, f.Number+1)
447 copy(m, message)
448 message = m
449 }
450

Callers 3

ParseRewriteTemplateFunction · 0.85
parseRewriteTemplateFunction · 0.85
parseRewriteTemplateMapFunction · 0.85

Calls 5

UnmarshalFunction · 0.92
parseRewriteTemplateFunction · 0.85
MultiRewriterFunction · 0.85
NumFieldMethod · 0.65
FieldMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…