v2 / vlib / v / slow_tests / inout / comptime_smartcast_variant.vv
34 lines · 31 sloc · 589 bytes · edd07bff01c4241e1ec6c2dd40c2f5591622f108
Raw
1type TestSum = int | string
2
3struct Abc {
4 s TestSum
5 t TestSum
6}
7
8fn get_value[T](obj T) string {
9 $for field in T.fields {
10 field_value := obj.$(field.name)
11 $if field_value is $sumtype {
12 $for field_variant in field_value.variants {
13 if field_value is field_variant {
14 dump(field_value)
15 $if field_value is $int {
16 dump('${field_value} is an int')
17 } $else $if field_value is $string {
18 dump('${field_value} is a string')
19 }
20 }
21 }
22 }
23 }
24 return 'done'
25}
26
27fn main() {
28 a := Abc{
29 s: TestSum('foo')
30 t: TestSum(1)
31 }
32 v := get_value(a)
33 dump(v)
34}
35