v2 / vlib / v / tests / generics / generic_array_pass_test.v
30 lines · 25 sloc · 547 bytes · 4578af33aa5f28a1f02f3a909b591ecec820003a
Raw
1struct Decoder {}
2
3pub fn decode[T](val string) !T {
4 mut decoder := Decoder{}
5 mut result := T{}
6 decoder.decode_value(mut result)!
7 return result
8}
9
10fn (mut decoder Decoder) decode_value[T](mut val T) ! {
11 $if T.unaliased_typ is $array {
12 decoder.decode_array(mut val)!
13 return
14 } $else $if T.unaliased_typ is $struct {
15 $for field in T.fields {
16 decoder.decode_value(mut val.$(field.name))!
17 }
18 }
19}
20
21fn (mut decoder Decoder) decode_array[T](mut val []T) ! {}
22
23struct Foo {
24 int []int
25 oint []?int
26}
27
28fn test_main() {
29 decode[Foo]('')!
30}
31