| 1 | import toml |
| 2 | |
| 3 | const toml_text = '# This TOML can reflect/decode to a struct |
| 4 | val_string = "test" |
| 5 | val_bool = false |
| 6 | val_int = 456 |
| 7 | val_i64 = 4567 |
| 8 | val_u64 = 45678 |
| 9 | val_f32 = 200.2 |
| 10 | val_f64 = 2000.2 |
| 11 | val_datetime = 2024-10-05 09:10:20.000 |
| 12 | val_date = 2099-09-09 |
| 13 | val_time = 22:22:22.222 |
| 14 | ' |
| 15 | |
| 16 | const toml_all_default_text = '# This TOML can reflect/decode to a struct all with default values' |
| 17 | |
| 18 | struct Test { |
| 19 | val_string string = 'abcd' |
| 20 | val_bool bool = true |
| 21 | val_int int = 123 |
| 22 | val_i64 i64 = 1234 |
| 23 | val_u64 u64 = 12345 |
| 24 | val_f32 f32 = 100.1 |
| 25 | val_f64 f64 = 1000.1 |
| 26 | val_datetime toml.DateTime = toml.DateTime{'1980-07-11 21:23:42.123'} |
| 27 | val_date toml.Date = toml.Date{'1977-07-07'} |
| 28 | val_time toml.Time = toml.Time{'11:11:11.111'} |
| 29 | } |
| 30 | |
| 31 | fn test_reflect_default_values() { |
| 32 | toml_has_values := toml.parse_text(toml_text) or { panic(err) } |
| 33 | test_has_values := toml_has_values.reflect[Test]() |
| 34 | |
| 35 | assert test_has_values.val_string == 'test' |
| 36 | assert test_has_values.val_bool == false |
| 37 | assert test_has_values.val_int == 456 |
| 38 | assert test_has_values.val_i64 == 4567 |
| 39 | assert test_has_values.val_u64 == 45678 |
| 40 | assert test_has_values.val_f32 == 200.2 |
| 41 | assert test_has_values.val_f64 == 2000.2 |
| 42 | assert test_has_values.val_datetime == toml.DateTime{'2024-10-05 09:10:20.000'} |
| 43 | assert test_has_values.val_date == toml.Date{'2099-09-09'} |
| 44 | assert test_has_values.val_time == toml.Time{'22:22:22.222'} |
| 45 | |
| 46 | toml_all_default_values := toml.parse_text(toml_all_default_text) or { panic(err) } |
| 47 | test_all_default_values := toml_all_default_values.reflect[Test]() |
| 48 | |
| 49 | assert test_all_default_values.val_string == 'abcd' |
| 50 | assert test_all_default_values.val_bool == true |
| 51 | assert test_all_default_values.val_int == 123 |
| 52 | assert test_all_default_values.val_i64 == 1234 |
| 53 | assert test_all_default_values.val_u64 == 12345 |
| 54 | assert test_all_default_values.val_f32 == 100.1 |
| 55 | assert test_all_default_values.val_f64 == 1000.1 |
| 56 | assert test_all_default_values.val_datetime == toml.DateTime{'1980-07-11 21:23:42.123'} |
| 57 | assert test_all_default_values.val_date == toml.Date{'1977-07-07'} |
| 58 | assert test_all_default_values.val_time == toml.Time{'11:11:11.111'} |
| 59 | } |
| 60 | |
| 61 | fn test_decode_struct_default_values() { |
| 62 | test_has_values := toml.decode[Test](toml_text) or { panic(err) } |
| 63 | assert test_has_values.val_string == 'test' |
| 64 | assert test_has_values.val_bool == false |
| 65 | assert test_has_values.val_int == 456 |
| 66 | assert test_has_values.val_i64 == 4567 |
| 67 | assert test_has_values.val_u64 == 45678 |
| 68 | assert test_has_values.val_f32 == 200.2 |
| 69 | assert test_has_values.val_f64 == 2000.2 |
| 70 | assert test_has_values.val_datetime == toml.DateTime{'2024-10-05 09:10:20.000'} |
| 71 | assert test_has_values.val_date == toml.Date{'2099-09-09'} |
| 72 | assert test_has_values.val_time == toml.Time{'22:22:22.222'} |
| 73 | |
| 74 | test_all_default_values := toml.decode[Test](toml_all_default_text) or { panic(err) } |
| 75 | assert test_all_default_values.val_string == 'abcd' |
| 76 | assert test_all_default_values.val_bool == true |
| 77 | assert test_all_default_values.val_int == 123 |
| 78 | assert test_all_default_values.val_i64 == 1234 |
| 79 | assert test_all_default_values.val_u64 == 12345 |
| 80 | assert test_all_default_values.val_f32 == 100.1 |
| 81 | assert test_all_default_values.val_f64 == 1000.1 |
| 82 | assert test_all_default_values.val_datetime == toml.DateTime{'1980-07-11 21:23:42.123'} |
| 83 | assert test_all_default_values.val_date == toml.Date{'1977-07-07'} |
| 84 | assert test_all_default_values.val_time == toml.Time{'11:11:11.111'} |
| 85 | } |
| 86 | |