v2 / vlib / v / tests / options / option_generic_array_test.v
38 lines · 33 sloc · 705 bytes · 95e1b7c14c92bf08a7655b63c7647eb6bd5d811a
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 is $option {
15 val = none
16 }
17}
18
19fn (mut decoder Decoder) decode_array[T](mut val []T) ! {
20 $if T is $option {
21 val << none
22 val << 1
23 } $else {
24 val << 1
25 }
26
27 mut array_element := T{}
28 decoder.decode_value(mut array_element)!
29 val << array_element
30}
31
32fn test_main() {
33 assert decode[[]int]('')! == [1, 0]
34 x := decode[[]?int]('')!
35 assert x[0] == ?int(none)
36 assert x[1] == ?int(1)
37 assert x[2] == none
38}
39