| 1 | import json |
| 2 | |
| 3 | @[heap] |
| 4 | struct Foo { |
| 5 | a &int |
| 6 | b &string |
| 7 | c &f64 |
| 8 | d &&int |
| 9 | e &&&string |
| 10 | } |
| 11 | |
| 12 | struct FooOption { |
| 13 | mut: |
| 14 | a ?&int |
| 15 | b ?&string |
| 16 | c ?&f64 |
| 17 | d ?&&int |
| 18 | e ?&&&string |
| 19 | } |
| 20 | |
| 21 | fn test_ptr() { |
| 22 | data := '{ "a": 123, "b": "foo", "c": 1.2, "d": 321, "e": "bar"}' |
| 23 | foo := json.decode(Foo, data)! |
| 24 | println(foo) |
| 25 | |
| 26 | assert dump(*foo.a) == 123 |
| 27 | assert dump(*foo.b) == 'foo' |
| 28 | assert dump(*foo.c) == 1.2 |
| 29 | assert dump(**foo.d) == 321 |
| 30 | assert dump(***foo.e) == 'bar' |
| 31 | |
| 32 | assert dump(json.encode(foo)) == '{"a":123,"b":"foo","c":1.2,"d":321,"e":"bar"}' |
| 33 | } |
| 34 | |
| 35 | fn test_option_ptr() ? { |
| 36 | data := '{ "a": 123, "b": "foo", "c": 1.2, "d": 321, "e": "bar"}' |
| 37 | foo := json.decode(FooOption, data) or { return none } |
| 38 | println(foo) |
| 39 | |
| 40 | assert dump(*foo.a?) == 123 |
| 41 | assert dump(*foo.b?) == 'foo' |
| 42 | assert dump(*foo.c?) == 1.2 |
| 43 | assert dump(**foo.d?) == 321 |
| 44 | assert dump(***foo.e?) == 'bar' |
| 45 | |
| 46 | assert dump(json.encode(foo)) == '{"a":123,"b":"foo","c":1.2,"d":321,"e":"bar"}' |
| 47 | } |
| 48 | |