/
ConvertScriptDataUtils.re
executable file
·99 lines (85 loc) · 3.28 KB
/
ConvertScriptDataUtils.re
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
open StateDataMainType;
/* external eventFunctionDataMapJsonToRecord: Js.Json.t => eventFunctionDataMap =
"%identity"; */
external attributeMapJsonToRecord:
Js.Dict.t(string) => ScriptAttributeType.attributeMap =
"%identity";
let _convertEventFunctionToStr = eventFunction =>
SerializeService.serializeFunction(eventFunction);
let _convertEventFunctionDataMapToStr = eventDataMap =>
eventDataMap
|> WonderCommonlib.ImmutableHashMapService.mapValid(
(. {init, update, dispose}) =>
{
init:
init
|> Js.Option.andThen((. init) => _convertEventFunctionToStr(init)),
update:
update
|> Js.Option.andThen((. update) =>
_convertEventFunctionToStr(update)
),
dispose:
dispose
|> Js.Option.andThen((. dispose) =>
_convertEventFunctionToStr(dispose)
),
}
)
|> Obj.magic
|> Js.Json.stringify;
let _buildEmptyMapStr = () => "{}";
let unsafeGetEventFunctionDataMapStr = (script, {scriptRecord} as state) => {
let ({scriptEventFunctionDataMap}: StateDataMainType.scriptRecord) as scriptRecord = scriptRecord;
switch (
scriptEventFunctionDataMap
|> WonderCommonlib.ImmutableSparseMapService.get(script)
) {
| None => _buildEmptyMapStr()
| Some(eventFunctionDataMap) =>
eventFunctionDataMap |> _convertEventFunctionDataMapToStr
};
};
let _convertAttributeMapToStr = attributeMap =>
attributeMap |> Obj.magic |> Js.Json.stringify;
let unsafeGetAttributeMapStr = (script, {scriptRecord} as state) => {
let ({scriptAttributeMap}: StateDataMainType.scriptRecord) as scriptRecord = scriptRecord;
/* scriptAttributeMap
|> ImmutableSparseMapService.unsafeGetAndCheck(script)
|> _convertAttributeMapToStr; */
switch (
scriptAttributeMap
|> WonderCommonlib.ImmutableSparseMapService.get(script)
) {
| None => _buildEmptyMapStr()
| Some(attributeMap) => attributeMap |> _convertAttributeMapToStr
};
};
let convertEventFunctionDataMapJsonToRecord =
(eventFunctionDataMapJson: Js.Dict.t(string)): eventFunctionDataMap =>
/* Js.Json.parseExn(eventFunctionDataMap) |> eventFunctionDataMapJsonToRecord; */
/* eventFunctionDataMapJson |> eventFunctionDataMapJsonToRecord; */
eventFunctionDataMapJson
|> Obj.magic
|> WonderCommonlib.ImmutableHashMapService.map((. {init, update, dispose}) => {
let initJsonData = init |> Obj.magic;
let updateJsonData = update |> Obj.magic;
let disposeJsonData = dispose |> Obj.magic;
{
init:
OptionService.isJsonSerializedValueNone(initJsonData) ?
None : Some(initJsonData |> SerializeService.deserializeFunction),
update:
OptionService.isJsonSerializedValueNone(updateJsonData) ?
None :
Some(updateJsonData |> SerializeService.deserializeFunction),
dispose:
OptionService.isJsonSerializedValueNone(disposeJsonData) ?
None :
Some(disposeJsonData |> SerializeService.deserializeFunction),
};
});
/* |> eventFunctionDataMapJsonToRecord; */
let convertAttributeMapJsonToRecord = attributeMapJson =>
/* Js.Json.parseExn(attributeMap) |> attributeMapJsonToRecord; */
attributeMapJson |> attributeMapJsonToRecord;