v2 / vlib / v / tests / comptime / comptime_map_it_test.v
31 lines · 28 sloc · 699 bytes · d260e348290e17450319b6148b611926eed3152f
Raw
1// vtest build: !sanitize-address-clang-without-gc
2type Any = []Any | f64 | int | map[string]Any | string
3
4struct Arr {
5 ints []int
6 floats []f64
7 strs []string
8}
9
10fn 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
25fn 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