| 1 | module main |
| 2 | |
| 3 | fn decode_primitive[T]() !T { |
| 4 | $if T is int { |
| 5 | return T(1) |
| 6 | } $else $if T is u8 { |
| 7 | return T(10) |
| 8 | } $else $if T is u16 { |
| 9 | return T(100) |
| 10 | } |
| 11 | return error('decode_primitive: not found') |
| 12 | } |
| 13 | |
| 14 | fn decode_array[T](_ []T) ![]T { |
| 15 | mut arr := []T{} |
| 16 | arr << decode_primitive[T]()! |
| 17 | return arr |
| 18 | } |
| 19 | |
| 20 | fn decode[T]() !T { |
| 21 | $if T is $array { |
| 22 | a := decode_array(T{})! |
| 23 | return a |
| 24 | } |
| 25 | return error('decode: not found') |
| 26 | } |
| 27 | |
| 28 | fn test_main() { |
| 29 | assert decode[[]int]()! == [1] |
| 30 | assert decode[[]u8]()! == [u8(10)] |
| 31 | assert decode[[]u16]()! == [u16(100)] |
| 32 | } |
| 33 | |