MCPcopy
hub / github.com/google/mangle / ConvertValue

Function ConvertValue

json2struct/json2struct.go:47–86  ·  view source on GitHub ↗

ConvertValue converts an encoding/json value into a Mangle value.

(value any)

Source from the content-addressed store, hash-verified

45
46// ConvertValue converts an encoding/json value into a Mangle value.
47func ConvertValue(value any) (ast.Constant, error) {
48 switch value := value.(type) {
49 case string:
50 return ast.String(value), nil
51 case float64:
52 return ast.Float64(value), nil
53 case bool:
54 if value {
55 return ast.TrueConstant, nil
56 }
57 return ast.FalseConstant, nil
58 case []any:
59 l := &ast.ListNil
60 for i := len(value) - 1; i >= 0; i-- {
61 value, err := ConvertValue(value[i])
62 if err != nil {
63 return ast.Constant{}, err
64 }
65 next := ast.ListCons(&value, l)
66 l = &next
67 }
68 return *l, nil
69 case map[string]any:
70 structEntries := map[*ast.Constant]*ast.Constant{}
71 for k, v := range value {
72 fieldName, err := ast.Name("/" + k)
73 if err != nil {
74 return ast.Constant{}, err
75 }
76 value, err := ConvertValue(v)
77 if err != nil {
78 return ast.Constant{}, err
79 }
80 structEntries[&fieldName] = &value
81 }
82 return *ast.Struct(structEntries), nil
83 default:
84 return ast.Constant{}, fmt.Errorf("unexpected value %v type %T: ", value, value)
85 }
86}

Callers 1

JSONtoStructFunction · 0.85

Calls 5

StringFunction · 0.92
Float64Function · 0.92
ListConsFunction · 0.92
NameFunction · 0.92
StructFunction · 0.92

Tested by

no test coverage detected