MCPcopy Create free account
hub / github.com/XmirrorSecurity/OpenSCA-cli / copyValue

Function copyValue

opensca/sca/java/xml/read.go:635–701  ·  view source on GitHub ↗
(dst reflect.Value, src []byte)

Source from the content-addressed store, hash-verified

633}
634
635func copyValue(dst reflect.Value, src []byte) (err error) {
636 dst0 := dst
637
638 if dst.Kind() == reflect.Pointer {
639 if dst.IsNil() {
640 dst.Set(reflect.New(dst.Type().Elem()))
641 }
642 dst = dst.Elem()
643 }
644
645 // Save accumulated data.
646 switch dst.Kind() {
647 case reflect.Invalid:
648 // Probably a comment.
649 default:
650 return errors.New("cannot unmarshal into " + dst0.Type().String())
651 case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
652 if len(src) == 0 {
653 dst.SetInt(0)
654 return nil
655 }
656 itmp, err := strconv.ParseInt(strings.TrimSpace(string(src)), 10, dst.Type().Bits())
657 if err != nil {
658 return err
659 }
660 dst.SetInt(itmp)
661 case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
662 if len(src) == 0 {
663 dst.SetUint(0)
664 return nil
665 }
666 utmp, err := strconv.ParseUint(strings.TrimSpace(string(src)), 10, dst.Type().Bits())
667 if err != nil {
668 return err
669 }
670 dst.SetUint(utmp)
671 case reflect.Float32, reflect.Float64:
672 if len(src) == 0 {
673 dst.SetFloat(0)
674 return nil
675 }
676 ftmp, err := strconv.ParseFloat(strings.TrimSpace(string(src)), dst.Type().Bits())
677 if err != nil {
678 return err
679 }
680 dst.SetFloat(ftmp)
681 case reflect.Bool:
682 if len(src) == 0 {
683 dst.SetBool(false)
684 return nil
685 }
686 value, err := strconv.ParseBool(strings.TrimSpace(string(src)))
687 if err != nil {
688 return err
689 }
690 dst.SetBool(value)
691 case reflect.String:
692 dst.SetString(string(src))

Callers 2

unmarshalAttrMethod · 0.85
unmarshalMethod · 0.85

Calls 1

StringMethod · 0.45

Tested by

no test coverage detected