v2 / vlib / v / tests / casts / cast_comptime_test.v
50 lines · 47 sloc · 714 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct Document0 {
2 a int
3 b f64
4 c string
5 d bool
6 e u8
7 f u32
8}
9
10type Any = []Any
11 | bool
12 | f32
13 | f64
14 | i16
15 | i64
16 | i8
17 | int
18 | map[string]Any
19 | string
20 | u16
21 | u32
22 | u64
23 | u8
24
25fn raw_encode[T](data T) !map[string]Any {
26 mut res := map[string]Any{}
27 $for field in T.fields {
28 x := data.$(field.name)
29 res[field.name] = Any(x)
30 }
31 return res
32}
33
34fn test_main() {
35 d := Document0{
36 a: 1
37 b: 1.1
38 c: 'qwerty'
39 d: false
40 e: u8(0)
41 f: u32(0)
42 }
43 map_data := raw_encode(d)!
44 assert map_data['a']! as int == d.a
45 assert map_data['b']! as f64 == d.b
46 assert map_data['c']! as string == d.c
47 assert map_data['d']! as bool == d.d
48 assert map_data['e']! as u8 == d.e
49 assert map_data['f']! as u32 == d.f
50}
51