| 1 | struct Document0 { |
| 2 | a int |
| 3 | b f64 |
| 4 | c string |
| 5 | d bool |
| 6 | e u8 |
| 7 | f u32 |
| 8 | } |
| 9 | |
| 10 | type Any = []Any |
| 11 | | bool |
| 12 | | f32 |
| 13 | | f64 |
| 14 | | i16 |
| 15 | | i64 |
| 16 | | i8 |
| 17 | | int |
| 18 | | map[string]Any |
| 19 | | string |
| 20 | | u16 |
| 21 | | u32 |
| 22 | | u64 |
| 23 | | u8 |
| 24 | |
| 25 | fn raw_encode[T](data T) !map[string]Any { |
| 26 | mut res := map[string]Any{} |
| 27 | $for field in T.fields { |
| 28 | x := data.$(field.name) |
| 29 | res[field.name] = Any(x) |
| 30 | } |
| 31 | return res |
| 32 | } |
| 33 | |
| 34 | fn test_main() { |
| 35 | d := Document0{ |
| 36 | a: 1 |
| 37 | b: 1.1 |
| 38 | c: 'qwerty' |
| 39 | d: false |
| 40 | e: u8(0) |
| 41 | f: u32(0) |
| 42 | } |
| 43 | map_data := raw_encode(d)! |
| 44 | assert map_data['a']! as int == d.a |
| 45 | assert map_data['b']! as f64 == d.b |
| 46 | assert map_data['c']! as string == d.c |
| 47 | assert map_data['d']! as bool == d.d |
| 48 | assert map_data['e']! as u8 == d.e |
| 49 | assert map_data['f']! as u32 == d.f |
| 50 | } |
| 51 | |