assignValue stores the TOML value carried by the node into v.
(v reflect.Value, expr *unstable.Node, value *unstable.Node)
| 1640 | |
| 1641 | // assignValue stores the TOML value carried by the node into v. |
| 1642 | func (d *decoder) assignValue(v reflect.Value, expr *unstable.Node, value *unstable.Node) (reflect.Value, error) { |
| 1643 | if v.Kind() == reflect.Ptr { |
| 1644 | if d.unmarshalerInterface { |
| 1645 | if u, ok := unmarshalerOf(v); ok { |
| 1646 | return v, u.UnmarshalTOML(d.rawValue(expr, value)) |
| 1647 | } |
| 1648 | } |
| 1649 | if v.IsNil() { |
| 1650 | v.Set(reflect.New(v.Type().Elem())) |
| 1651 | } |
| 1652 | nv, err := d.assignValue(v.Elem(), expr, value) |
| 1653 | if err != nil || !nv.IsValid() { |
| 1654 | return reflect.Value{}, err |
| 1655 | } |
| 1656 | v.Elem().Set(nv) |
| 1657 | return v, nil |
| 1658 | } |
| 1659 | |
| 1660 | if d.unmarshalerInterface { |
| 1661 | if u, ok := unmarshalerOf(v); ok { |
| 1662 | return v, u.UnmarshalTOML(d.rawValue(expr, value)) |
| 1663 | } |
| 1664 | } |
| 1665 | |
| 1666 | switch value.Kind { |
| 1667 | case unstable.String: |
| 1668 | return d.assignString(v, value) |
| 1669 | case unstable.Integer: |
| 1670 | return d.assignInteger(v, value) |
| 1671 | case unstable.Float: |
| 1672 | return d.assignFloat(v, value) |
| 1673 | case unstable.Bool: |
| 1674 | return d.assignBool(v, value) |
| 1675 | case unstable.DateTime: |
| 1676 | return d.assignDateTime(v, value) |
| 1677 | case unstable.LocalDateTime: |
| 1678 | return d.assignLocalDateTime(v, value) |
| 1679 | case unstable.LocalDate: |
| 1680 | return d.assignLocalDate(v, value) |
| 1681 | case unstable.LocalTime: |
| 1682 | return d.assignLocalTime(v, value) |
| 1683 | case unstable.Array: |
| 1684 | return d.assignArray(v, expr, value) |
| 1685 | case unstable.InlineTable: |
| 1686 | return d.assignInlineTable(v, expr, value) |
| 1687 | default: |
| 1688 | return reflect.Value{}, unstable.NewParserError(value.Data, "unsupported value kind %s", value.Kind) |
| 1689 | } |
| 1690 | } |
| 1691 | |
| 1692 | func (d *decoder) assignString(v reflect.Value, value *unstable.Node) (reflect.Value, error) { |
| 1693 | switch v.Kind() { |
no test coverage detected