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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
1 /*
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
2 1 2 3 4 5 6 7
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
3 12345678901234567890123456789012345678901234567890123456789012345678901234567890
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
4 */
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
5
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
6 namespace {{rootName}}
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
7 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
8 function StoneCheckSerializedValueType(value: any, typeStr: string)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
9 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
10 StoneCheckSerializedValueTypeGeneric(value);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
11
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
12 if (value['type'] != typeStr)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
13 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
14 throw new Error(
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
15 `Cannot deserialize type ${value['type']} into ${typeStr}`);
490
6470248790db ongoing codegen work
bgo-osimis
parents:
diff changeset
16 }
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
17 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
18
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
19 function isString(val: any) :boolean
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
20 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
21 return ((typeof val === 'string') || (val instanceof String));
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
22 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
23
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
24 function StoneCheckSerializedValueTypeGeneric(value: any)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
25 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
26 if ( (!('type' in value)) || (!isString(value)) )
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
27 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
28 throw new Error(
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
29 "Cannot deserialize value ('type' key invalid)");
490
6470248790db ongoing codegen work
bgo-osimis
parents:
diff changeset
30 }
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
31 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
32
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
33 // end of generic methods
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
34 {% for enum in enums%}
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
35 export enum {{enum['name']}} {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
36 {% for key in enumDict.keys()%}
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
37 {{key}},
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
38 {%endfor%}
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
39 };
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
40 {%endfor%}
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
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
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
51 public StoneSerialize(): string {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
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
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
54 container['value'] = this;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
55 return JSON.stringify(container);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
56 }
490
6470248790db ongoing codegen work
bgo-osimis
parents:
diff changeset
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
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
59 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
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
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
63 return result;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
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
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
70 };
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
71
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
72 export interface IDispatcher
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
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
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
76 };
490
6470248790db ongoing codegen work
bgo-osimis
parents:
diff changeset
77
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
78 /** Service function for StoneDispatchToHandler */
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
79 export function StoneDispatchJsonToHandler(
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
80 jsonValueStr: string, dispatcher: IDispatcher): boolean
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
81 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
82 let jsonValue: any = JSON.parse(jsonValueStr);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
83 StoneCheckSerializedValueTypeGeneric(jsonValue);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
84 let type: string = jsonValue["type"];
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
85 if (type == "")
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
86 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
87 // this should never ever happen
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
88 throw new Error("Caught empty type while dispatching");
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
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
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
91 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
92 let value = jsonValue["value"] as Message1;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
93 return dispatcher.HandleMessage1(value);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
94 }
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
95 {% enfor %}
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
96 else
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
97 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
98 return false;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
99 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
100 }
490
6470248790db ongoing codegen work
bgo-osimis
parents:
diff changeset
101
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
102 /** Takes a serialized type and passes this to the dispatcher */
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
103 export function StoneDispatchToHandler(
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
104 strValue: string, dispatcher: IDispatcher): boolean
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
105 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
106 let jsonValue: any = JSON.parse(strValue)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
107 return StoneDispatchJsonToHandler(jsonValue, dispatcher);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
108 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
109 }