annotate Resources/CodeGeneration/template.in.ts @ 491:8e7e151ef472 bgo-commands-codegen

Unit tests pass for enum generation
author bgo-osimis
date Wed, 20 Feb 2019 20:51:30 +0100
parents 6470248790db
children 6fbf2eae7c88
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
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
42 export class Message1 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
43 a: number;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
44 b: string;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
45 c: EnumMonth0;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
46 d: boolean;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
47 public StoneSerialize(): string {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
48 let container: object = {};
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
49 container['type'] = 'VsolStuff.Message1';
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
50 container['value'] = this;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
51 return JSON.stringify(container);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
52 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
53 };
490
6470248790db ongoing codegen work
bgo-osimis
parents:
diff changeset
54
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
55 export class Message2 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
56 constructor()
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
57 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
58 this.tata = new Array<Message1>();
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
59 this.tutu = new Array<string>();
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
60 this.titi = new Map<string, string>();
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
61 this.lulu = new Map<string, Message1>();
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
62 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
63 toto: string;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
64 tata: Message1[];
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
65 tutu: string[];
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
66 titi: Map<string, string>;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
67 lulu: Map<string, Message1>;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
68
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
69 public StoneSerialize(): string {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
70 let container: object = {};
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
71 container['type'] = 'VsolStuff.Message2';
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
72 container['value'] = this;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
73 return JSON.stringify(container);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
74 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
75 public static StoneDeserialize(valueStr: string) : Message2
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
76 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
77 let value: any = JSON.parse(valueStr);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
78 StoneCheckSerializedValueType(value, "VsolStuff.Message2");
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
79 let result: Message2 = value['value'] as Message2;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
80 return result;
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 };
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
83
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
84 export interface IDispatcher
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
85 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
86 HandleMessage1(value: Message1): boolean;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
87 HandleMessage2(value: Message2): boolean;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
88 };
490
6470248790db ongoing codegen work
bgo-osimis
parents:
diff changeset
89
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
90 /** Service function for StoneDispatchToHandler */
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
91 export function StoneDispatchJsonToHandler(
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
92 jsonValueStr: string, dispatcher: IDispatcher): boolean
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
93 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
94 let jsonValue: any = JSON.parse(jsonValueStr);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
95 StoneCheckSerializedValueTypeGeneric(jsonValue);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
96 let type: string = jsonValue["type"];
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
97 if (type == "")
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
98 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
99 // this should never ever happen
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
100 throw new Error("Caught empty type while dispatching");
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
101 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
102 else if (type == "VsolStuff.Message1")
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
103 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
104 let value = jsonValue["value"] as Message1;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
105 return dispatcher.HandleMessage1(value);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
106 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
107 else if (type == "VsolStuff.Message2")
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 let value = jsonValue["value"] as Message2;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
110 return dispatcher.HandleMessage2(value);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
111 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
112 else
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
113 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
114 return false;
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
115 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
116 }
490
6470248790db ongoing codegen work
bgo-osimis
parents:
diff changeset
117
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
118 /** Takes a serialized type and passes this to the dispatcher */
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
119 export function StoneDispatchToHandler(
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
120 strValue: string, dispatcher: IDispatcher): boolean
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
121 {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
122 let jsonValue: any = JSON.parse(strValue)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
123 return StoneDispatchJsonToHandler(jsonValue, dispatcher);
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
124 }
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 490
diff changeset
125 }