|
| 1 | +type data_entry = |
| 2 | + { id1 : string |
| 3 | + ; id2 : string |
| 4 | + ; url : string |
| 5 | + ; icon : string |
| 6 | + ; name : string |
| 7 | + ; unknown1 : string |
| 8 | + ; unknown2 : string |
| 9 | + ; unknown3 : string |
| 10 | + ; unknown4 : string |
| 11 | + ; unknown5 : string option |
| 12 | + ; unknown6 : string option |
| 13 | + ; id3 : string |
| 14 | + ; id4 : string |
| 15 | + ; unknown7 : string list |
| 16 | + } |
| 17 | + |
| 18 | +type config_entry = |
| 19 | + { key : string |
| 20 | + ; value : string |
| 21 | + } |
| 22 | + |
| 23 | +type nested_entry = |
| 24 | + { id1 : string |
| 25 | + ; id2 : string |
| 26 | + ; url : string |
| 27 | + ; icon : string |
| 28 | + ; name : string |
| 29 | + ; clan : string |
| 30 | + ; score1 : string |
| 31 | + ; score2 : string |
| 32 | + ; score3 : string |
| 33 | + ; score4 : string |
| 34 | + ; score5 : string option |
| 35 | + ; id3 : string |
| 36 | + ; id4 : string |
| 37 | + ; unknown_list : string list |
| 38 | + } |
| 39 | + |
| 40 | +type t = |
| 41 | + { id1 : string |
| 42 | + ; id2 : string |
| 43 | + ; timestamp1 : string |
| 44 | + ; timestamp2 : string |
| 45 | + ; data_entries : data_entry list |
| 46 | + ; unknown1 : string |
| 47 | + ; unknown2 : string |
| 48 | + ; unknown3 : string option |
| 49 | + ; config : config_entry list |
| 50 | + ; nested_entries : nested_entry list |
| 51 | + } |
| 52 | + |
| 53 | +let from_json json = |
| 54 | + let open Yojson.Basic.Util in |
| 55 | + { id1 = json |> member "id1" |> to_string |
| 56 | + ; id2 = json |> member "id2" |> to_string |
| 57 | + ; timestamp1 = json |> member "timestamp1" |> to_string |
| 58 | + ; timestamp2 = json |> member "timestamp2" |> to_string |
| 59 | + ; data_entries = |
| 60 | + json |
| 61 | + |> member "data_entries" |
| 62 | + |> to_list |
| 63 | + |> List.map (fun entry -> |
| 64 | + { id1 = entry |> member "id1" |> to_string |
| 65 | + ; id2 = entry |> member "id2" |> to_string |
| 66 | + ; url = entry |> member "url" |> to_string |
| 67 | + ; icon = entry |> member "icon" |> to_string |
| 68 | + ; name = entry |> member "name" |> to_string |
| 69 | + ; unknown1 = entry |> member "unknown1" |> to_string |
| 70 | + ; unknown2 = entry |> member "unknown2" |> to_string |
| 71 | + ; unknown3 = entry |> member "unknown3" |> to_string |
| 72 | + ; unknown4 = entry |> member "unknown4" |> to_string |
| 73 | + ; unknown5 = entry |> member "unknown5" |> to_option to_string |
| 74 | + ; unknown6 = entry |> member "unknown6" |> to_option to_string |
| 75 | + ; id3 = entry |> member "id3" |> to_string |
| 76 | + ; id4 = entry |> member "id4" |> to_string |
| 77 | + ; unknown7 = entry |> member "unknown7" |> to_list |> List.map to_string |
| 78 | + }) |
| 79 | + ; unknown1 = json |> member "unknown1" |> to_string |
| 80 | + ; unknown2 = json |> member "unknown2" |> to_string |
| 81 | + ; unknown3 = json |> member "unknown3" |> to_option to_string |
| 82 | + ; config = |
| 83 | + json |
| 84 | + |> member "config" |
| 85 | + |> to_list |
| 86 | + |> List.map (fun entry -> |
| 87 | + { key = entry |> member "key" |> to_string; value = entry |> member "value" |> to_string }) |
| 88 | + ; nested_entries = |
| 89 | + json |
| 90 | + |> member "nested_entries" |
| 91 | + |> to_list |
| 92 | + |> List.map (fun entry -> |
| 93 | + { id1 = entry |> member "id1" |> to_string |
| 94 | + ; id2 = entry |> member "id2" |> to_string |
| 95 | + ; url = entry |> member "url" |> to_string |
| 96 | + ; icon = entry |> member "icon" |> to_string |
| 97 | + ; name = entry |> member "name" |> to_string |
| 98 | + ; clan = entry |> member "clan" |> to_string |
| 99 | + ; score1 = entry |> member "score1" |> to_string |
| 100 | + ; score2 = entry |> member "score2" |> to_string |
| 101 | + ; score3 = entry |> member "score3" |> to_string |
| 102 | + ; score4 = entry |> member "score4" |> to_string |
| 103 | + ; score5 = entry |> member "score5" |> to_option to_string |
| 104 | + ; id3 = entry |> member "id3" |> to_string |
| 105 | + ; id4 = entry |> member "id4" |> to_string |
| 106 | + ; unknown_list = entry |> member "unknown_list" |> to_list |> List.map to_string |
| 107 | + }) |
| 108 | + } |
| 109 | +;; |
| 110 | + |
| 111 | +let to_json a = |
| 112 | + `Assoc |
| 113 | + [ "id1", `String a.id1 |
| 114 | + ; "id2", `String a.id2 |
| 115 | + ; "timestamp1", `String a.timestamp1 |
| 116 | + ; "timestamp2", `String a.timestamp2 |
| 117 | + ; ( "data_entries" |
| 118 | + , `List |
| 119 | + (List.map |
| 120 | + (fun entry -> |
| 121 | + `Assoc |
| 122 | + [ "id1", `String entry.id1 |
| 123 | + ; "id2", `String entry.id2 |
| 124 | + ; "url", `String entry.url |
| 125 | + ; "icon", `String entry.icon |
| 126 | + ; "name", `String entry.name |
| 127 | + ; "unknown1", `String entry.unknown1 |
| 128 | + ; "unknown2", `String entry.unknown2 |
| 129 | + ; "unknown3", `String entry.unknown3 |
| 130 | + ; "unknown4", `String entry.unknown4 |
| 131 | + ; ("unknown5", match entry.unknown5 with Some v -> `String v | None -> `Null) |
| 132 | + ; ("unknown6", match entry.unknown6 with Some v -> `String v | None -> `Null) |
| 133 | + ; "id3", `String entry.id3 |
| 134 | + ; "id4", `String entry.id4 |
| 135 | + ; "unknown7", `List (List.map (fun i -> `String i) entry.unknown7) |
| 136 | + ]) |
| 137 | + a.data_entries) ) |
| 138 | + ; "unknown1", `String a.unknown1 |
| 139 | + ; "unknown2", `String a.unknown2 |
| 140 | + ; ("unknown3", match a.unknown3 with Some v -> `String v | None -> `Null) |
| 141 | + ; ( "config" |
| 142 | + , `List (List.map (fun entry -> `Assoc [ "key", `String entry.key; "value", `String entry.value ]) a.config) ) |
| 143 | + ; ( "nested_entries" |
| 144 | + , `List |
| 145 | + (List.map |
| 146 | + (fun entry -> |
| 147 | + `Assoc |
| 148 | + [ "id1", `String entry.id1 |
| 149 | + ; "id2", `String entry.id2 |
| 150 | + ; "url", `String entry.url |
| 151 | + ; "icon", `String entry.icon |
| 152 | + ; "name", `String entry.name |
| 153 | + ; "clan", `String entry.clan |
| 154 | + ; "score1", `String entry.score1 |
| 155 | + ; "score2", `String entry.score2 |
| 156 | + ; "score3", `String entry.score3 |
| 157 | + ; "score4", `String entry.score4 |
| 158 | + ; ("score5", match entry.score5 with Some v -> `String v | None -> `Null) |
| 159 | + ; "id3", `String entry.id3 |
| 160 | + ; "id4", `String entry.id4 |
| 161 | + ; "unknown_list", `List (List.map (fun i -> `String i) entry.unknown_list) |
| 162 | + ]) |
| 163 | + a.nested_entries) ) |
| 164 | + ] |
| 165 | +;; |
0 commit comments