vxx2 / vlib / v / tests / generics / generic_resolve_test.v
49 lines · 43 sloc · 817 bytes · 04501847a8255570ea06ec003cab3dc86b7f60b8
Raw
1struct Encoder {}
2
3struct StructType[T] {
4mut:
5 val T
6}
7
8fn (e &Encoder) encode_struct[U](val U) ! {
9 $for field in U.fields {
10 $if field.typ is $struct {
11 e.encode_struct(val.$(field.name))!
12 } $else $if field.typ is $map {
13 e.encode_map(val.$(field.name))!
14 }
15 }
16}
17
18fn (e &Encoder) encode_map[U](val U) ! {
19 for k, v in val {
20 e.encode_value_with_level(v)!
21 }
22}
23
24fn (e &Encoder) encode_value_with_level[U](val U) ! {
25 $if U is $struct {
26 e.encode_struct(val)!
27 } $else $if U is $map {
28 e.encode_map(val)!
29 }
30}
31
32fn test_simple_cases() {
33 e := Encoder{}
34 e.encode_struct(StructType[map[string]string]{
35 val: {
36 '1': '1'
37 }
38 })!
39 e.encode_struct(StructType[map[string]map[string]int]{})!
40 e.encode_struct(StructType[map[string]map[string]int]{
41 val: {
42 'a': {
43 '1': 1
44 }
45 }
46 })!
47
48 assert true
49}
50