v2 / vlib / v / tests / generics / generic_resolve_test.v
50 lines · 44 sloc · 822 bytes · 6488041a749df9762348d019c4223908c476f2e2
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 value := val.$(field.name)
11 $if field.typ is $struct {
12 e.encode_struct(value)!
13 } $else $if field.typ is $map {
14 e.encode_map(value)!
15 }
16 }
17}
18
19fn (e &Encoder) encode_map[U](val U) ! {
20 for k, v in val {
21 e.encode_value_with_level(v)!
22 }
23}
24
25fn (e &Encoder) encode_value_with_level[U](val U) ! {
26 $if U is $struct {
27 e.encode_struct(val)!
28 } $else $if U is $map {
29 e.encode_map(val)!
30 }
31}
32
33fn test_simple_cases() {
34 e := Encoder{}
35 e.encode_struct(StructType[map[string]string]{
36 val: {
37 '1': '1'
38 }
39 })!
40 e.encode_struct(StructType[map[string]map[string]int]{})!
41 e.encode_struct(StructType[map[string]map[string]int]{
42 val: {
43 'a': {
44 '1': 1
45 }
46 }
47 })!
48
49 assert true
50}
51