MCPcopy
hub / github.com/tinylib/msgp / getField

Method getField

parse/getast.go:521–622  ·  view source on GitHub ↗

translate *ast.Field into []gen.StructField

(f *ast.Field)

Source from the content-addressed store, hash-verified

519
520// translate *ast.Field into []gen.StructField
521func (fs *FileSet) getField(f *ast.Field) []gen.StructField {
522 sf := make([]gen.StructField, 1)
523 var extension, flatten bool
524 // parse tag; otherwise field name is field tag
525 if f.Tag != nil {
526 var body string
527 if fs.tagName != "" {
528 body = reflect.StructTag(strings.Trim(f.Tag.Value, "`")).Get(fs.tagName)
529 }
530 if body == "" {
531 body = reflect.StructTag(strings.Trim(f.Tag.Value, "`")).Get("msg")
532 }
533 if body == "" {
534 body = reflect.StructTag(strings.Trim(f.Tag.Value, "`")).Get("msgpack")
535 }
536 tags := strings.Split(body, ",")
537 if len(tags) >= 2 {
538 for _, tag := range tags[1:] {
539 switch tag {
540 case "extension":
541 extension = true
542 case "flatten":
543 flatten = true
544 default:
545 // Check for limit=N format
546 if strings.HasPrefix(tag, "limit=") {
547 limitStr := strings.TrimPrefix(tag, "limit=")
548 if limit, err := strconv.ParseUint(limitStr, 10, 32); err == nil {
549 sf[0].FieldLimit = uint32(limit)
550 } else {
551 warnf("invalid limit value in field tag: %s", limitStr)
552 }
553 }
554 }
555 }
556 }
557 // ignore "-" fields
558 if tags[0] == "-" {
559 return nil
560 }
561 sf[0].FieldTag = tags[0]
562 sf[0].FieldTagParts = tags
563 sf[0].RawTag = f.Tag.Value
564 }
565
566 ex := fs.parseExpr(f.Type)
567 if ex == nil {
568 return nil
569 }
570
571 // parse field name
572 switch len(f.Names) {
573 case 0:
574 if flatten {
575 return fs.getFieldsFromEmbeddedStruct(f.Type)
576 } else {
577 sf[0].FieldName = embedded(f.Type)
578 }

Callers 1

parseFieldListMethod · 0.95

Calls 6

parseExprMethod · 0.95
warnfFunction · 0.85
embeddedFunction · 0.85
ParseUintMethod · 0.80
CopyMethod · 0.65

Tested by

no test coverage detected