| 1 | type MyArray = []string |
| 2 | type MyString = string |
| 3 | type MyFloat = f64 |
| 4 | type MyMap = map[string]string |
| 5 | |
| 6 | struct Foo { |
| 7 | a string |
| 8 | b ?string |
| 9 | c MyArray |
| 10 | d MyString |
| 11 | e MyFloat |
| 12 | f MyMap |
| 13 | } |
| 14 | |
| 15 | fn test_main() { |
| 16 | mut out := map[string][]string{} |
| 17 | $for field in Foo.fields { |
| 18 | out[field.name] = []string{} |
| 19 | print('${field.name} is ') |
| 20 | $if field.unaliased_typ is $int { |
| 21 | println('numeric') |
| 22 | out[field.name] << 'numeric' |
| 23 | } $else $if field.unaliased_typ is $array { |
| 24 | println('array') |
| 25 | out[field.name] << 'array' |
| 26 | } $else $if field.unaliased_typ is $float { |
| 27 | println('float') |
| 28 | out[field.name] << 'float' |
| 29 | } $else $if field.unaliased_typ is $map { |
| 30 | println('map') |
| 31 | out[field.name] << 'map' |
| 32 | } $else $if field.unaliased_typ is string || field.unaliased_typ is ?string { |
| 33 | println('string opt? ${field.is_option}') |
| 34 | out[field.name] << 'string' |
| 35 | } $else { |
| 36 | assert false |
| 37 | } |
| 38 | } |
| 39 | assert out['a'][0] == 'string' |
| 40 | assert out['b'][0] == 'string' |
| 41 | assert out['c'][0] == 'array' |
| 42 | assert out['d'][0] == 'string' |
| 43 | assert out['e'][0] == 'float' |
| 44 | assert out['f'][0] == 'map' |
| 45 | } |
| 46 | |