Mercurial > hg > orthanc-stone
annotate Resources/CodeGeneration/template.in.ts @ 493:6fbf2eae7c88 bgo-commands-codegen
All unit tests pass for generation, including handler and dispatcher
author | bgo-osimis |
---|---|
date | Fri, 22 Feb 2019 10:48:43 +0100 |
parents | 8e7e151ef472 |
children | fc17251477d6 |
rev | line source |
---|---|
491 | 1 /* |
2 1 2 3 4 5 6 7 | |
3 12345678901234567890123456789012345678901234567890123456789012345678901234567890 | |
4 */ | |
5 | |
6 namespace {{rootName}} | |
7 { | |
8 function StoneCheckSerializedValueType(value: any, typeStr: string) | |
9 { | |
10 StoneCheckSerializedValueTypeGeneric(value); | |
11 | |
12 if (value['type'] != typeStr) | |
13 { | |
14 throw new Error( | |
15 `Cannot deserialize type ${value['type']} into ${typeStr}`); | |
490 | 16 } |
491 | 17 } |
18 | |
19 function isString(val: any) :boolean | |
20 { | |
21 return ((typeof val === 'string') || (val instanceof String)); | |
22 } | |
23 | |
24 function StoneCheckSerializedValueTypeGeneric(value: any) | |
25 { | |
26 if ( (!('type' in value)) || (!isString(value)) ) | |
27 { | |
28 throw new Error( | |
29 "Cannot deserialize value ('type' key invalid)"); | |
490 | 30 } |
491 | 31 } |
32 | |
33 // end of generic methods | |
34 {% for enum in enums%} | |
35 export enum {{enum['name']}} { | |
36 {% for key in enumDict.keys()%} | |
37 {{key}}, | |
38 {%endfor%} | |
39 }; | |
40 {%endfor%} | |
41 | |
493
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
42 |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
43 """ // end of generic methods |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
44 {% for struct in structs%} export class {{struct['name']}} { |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
45 {% for key in struct['fields']%} {{key}}:{{CanonToTs(struct['fields'][key])}}; |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
46 {% endfor %} |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
47 constructor() { |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
48 {% for key in struct['fields']%} {{key}} = new {{CanonToTs(struct['fields'][key])}}(); |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
49 {% endfor %} } |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
50 |
491 | 51 public StoneSerialize(): string { |
52 let container: object = {}; | |
493
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
53 container['type'] = '{{rWholootName}}.{{struct['name']}}'; |
491 | 54 container['value'] = this; |
55 return JSON.stringify(container); | |
56 } | |
490 | 57 |
493
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
58 public static StoneDeserialize(valueStr: string) : {{struct['name']}} |
491 | 59 { |
60 let value: any = JSON.parse(valueStr); | |
493
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
61 StoneCheckSerializedValueType(value, '{{rootName}}.{{struct['name']}}'); |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
62 let result: {{struct['name']}} = value['value'] as {{struct['name']}}; |
491 | 63 return result; |
64 } | |
493
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
65 |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
66 } |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
67 |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
68 {% endfor %} |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
69 |
491 | 70 }; |
71 | |
72 export interface IDispatcher | |
73 { | |
493
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
74 {% for struct in structs%} HandleMessage1(value: {{struct['name']}}): boolean; |
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
75 {% endfor %} |
491 | 76 }; |
490 | 77 |
491 | 78 /** Service function for StoneDispatchToHandler */ |
79 export function StoneDispatchJsonToHandler( | |
80 jsonValueStr: string, dispatcher: IDispatcher): boolean | |
81 { | |
82 let jsonValue: any = JSON.parse(jsonValueStr); | |
83 StoneCheckSerializedValueTypeGeneric(jsonValue); | |
84 let type: string = jsonValue["type"]; | |
85 if (type == "") | |
86 { | |
87 // this should never ever happen | |
88 throw new Error("Caught empty type while dispatching"); | |
89 } | |
493
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
90 {% for struct in structs%} else if (type == "VsolStuff.{{struct['name']}}") |
491 | 91 { |
92 let value = jsonValue["value"] as Message1; | |
93 return dispatcher.HandleMessage1(value); | |
94 } | |
493
6fbf2eae7c88
All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents:
491
diff
changeset
|
95 {% enfor %} |
491 | 96 else |
97 { | |
98 return false; | |
99 } | |
100 } | |
490 | 101 |
491 | 102 /** Takes a serialized type and passes this to the dispatcher */ |
103 export function StoneDispatchToHandler( | |
104 strValue: string, dispatcher: IDispatcher): boolean | |
105 { | |
106 let jsonValue: any = JSON.parse(strValue) | |
107 return StoneDispatchJsonToHandler(jsonValue, dispatcher); | |
108 } | |
109 } |