| 1 | // vtest build: !sanitize-address-clang-without-gc |
| 2 | type Any = []Any | f64 | int | map[string]Any | string |
| 3 | |
| 4 | struct Arr { |
| 5 | ints []int |
| 6 | floats []f64 |
| 7 | strs []string |
| 8 | } |
| 9 | |
| 10 | fn encode[T](typ T) map[string]Any { |
| 11 | mut mp := map[string]Any{} |
| 12 | $for field in T.fields { |
| 13 | value := typ.$(field.name) |
| 14 | $if field.is_enum { |
| 15 | mp[field.name] = Any(int(value)) |
| 16 | } $else $if field.is_array { |
| 17 | mp[field.name] = value.map(Any(it)) |
| 18 | } $else { |
| 19 | mp[field.name] = Any(value) |
| 20 | } |
| 21 | } |
| 22 | return mp |
| 23 | } |
| 24 | |
| 25 | fn test_main() { |
| 26 | a := Arr{[5], [2.0], ['asdf']} |
| 27 | r := encode[Arr](a) |
| 28 | assert unsafe { r['ints'] } == Any([Any(5)]) |
| 29 | assert unsafe { r['floats'] } == Any([Any(2.0)]) |
| 30 | assert unsafe { r['strs'] } == Any([Any('asdf')]) |
| 31 | } |
| 32 | |