| 1 | import strings |
| 2 | |
| 3 | fn myprintln[T](data T, mut str strings.Builder) T { |
| 4 | $if T is $array { |
| 5 | str.write_string('array: [') |
| 6 | for i, elem in data { |
| 7 | myprintln(elem, mut str) |
| 8 | if i < data.len - 1 { |
| 9 | str.write_string(', ') |
| 10 | } |
| 11 | } |
| 12 | str.write_string(']') |
| 13 | } $else $if T is $map { |
| 14 | str.write_string('map: {') |
| 15 | for key, val in data { |
| 16 | str.write_string('(key) ') |
| 17 | myprintln(key, mut str) |
| 18 | str.write_string(' -> (value) ') |
| 19 | myprintln(val, mut str) |
| 20 | } |
| 21 | str.write_string('}') |
| 22 | } $else { |
| 23 | str.write_string(data.str()) |
| 24 | } |
| 25 | return data |
| 26 | } |
| 27 | |
| 28 | struct Test { |
| 29 | mut: |
| 30 | s strings.Builder |
| 31 | } |
| 32 | |
| 33 | fn test_recursive_array() { |
| 34 | mut t := Test{} |
| 35 | myprintln([[1], [2], [3]], mut t.s) |
| 36 | assert t.s.str() == 'array: [array: [1], array: [2], array: [3]]' |
| 37 | } |
| 38 | |
| 39 | fn test_recursive_map() { |
| 40 | mut t2 := Test{} |
| 41 | myprintln({ |
| 42 | 'a': [1, 2, 3] |
| 43 | 'b': [1000] |
| 44 | }, mut t2.s) |
| 45 | assert t2.s.str() == 'map: {(key) a -> (value) array: [1, 2, 3](key) b -> (value) array: [1000]}' |
| 46 | } |
| 47 | |