| 215 | } |
| 216 | |
| 217 | private getRootDeserializer(serializer: Serializer) { |
| 218 | let rootDeserializer = this.rootDeserializers.get(serializer); |
| 219 | if (rootDeserializer !== undefined) { |
| 220 | return rootDeserializer; |
| 221 | } |
| 222 | const readContext = this.readContext; |
| 223 | const reader = readContext.reader; |
| 224 | const rootSerializer = TypeId.polymorphicType(serializer.getTypeId()) |
| 225 | ? serializer |
| 226 | : this.anySerializer; |
| 227 | const rootHeader = ConfigFlags.isCrossLanguageFlag; |
| 228 | rootDeserializer = (bytes: Uint8Array) => { |
| 229 | readContext.reset(bytes); |
| 230 | const bitmap = reader.readUint8(); |
| 231 | if (bitmap !== rootHeader) { |
| 232 | this.throwInvalidRootHeader(bitmap); |
| 233 | } |
| 234 | return rootSerializer.readRef(); |
| 235 | }; |
| 236 | this.rootDeserializers.set(serializer, rootDeserializer); |
| 237 | return rootDeserializer; |
| 238 | } |
| 239 | |
| 240 | serialize<T = any>(data: T, serializer: Serializer = this.anySerializer) { |
| 241 | return this.getRootSerializer(serializer)(data); |