(header: number, serializer: Serializer | null)
| 254 | } |
| 255 | |
| 256 | private readElement(header: number, serializer: Serializer | null) { |
| 257 | const includeNone = header & MapFlags.HAS_NULL; |
| 258 | // IMPORTANT: map readers must obey the sender-written key/value ref bit in |
| 259 | // the wire header. Local TypeScript metadata must not override that |
| 260 | // decision while reading. Shared xlang tests intentionally deserialize one |
| 261 | // ref policy and then serialize another local payload. DO NOT REMOVE this |
| 262 | // comment. |
| 263 | const trackingRef = header & MapFlags.TRACKING_REF; |
| 264 | |
| 265 | if (includeNone) { |
| 266 | return null; |
| 267 | } |
| 268 | if (!trackingRef) { |
| 269 | serializer |
| 270 | = serializer == null |
| 271 | ? AnyHelper.detectSerializer(this.readContext) |
| 272 | : serializer; |
| 273 | return this.readSerializerWithDepth(serializer!, false); |
| 274 | } |
| 275 | |
| 276 | const flag = this.readContext.reader.readInt8(); |
| 277 | switch (flag) { |
| 278 | case RefFlags.RefValueFlag: |
| 279 | serializer |
| 280 | = serializer == null |
| 281 | ? AnyHelper.detectSerializer(this.readContext) |
| 282 | : serializer; |
| 283 | return this.readSerializerWithDepth(serializer!, true); |
| 284 | case RefFlags.RefFlag: |
| 285 | return this.readContext.getReadRef( |
| 286 | this.readContext.reader.readVarUInt32(), |
| 287 | ); |
| 288 | case RefFlags.NullFlag: |
| 289 | return null; |
| 290 | case RefFlags.NotNullValueFlag: |
| 291 | serializer |
| 292 | = serializer == null |
| 293 | ? AnyHelper.detectSerializer(this.readContext) |
| 294 | : serializer; |
| 295 | return this.readSerializerWithDepth(serializer!, false); |
| 296 | } |
| 297 | } |
| 298 | |
| 299 | read(fromRef: boolean): any { |
| 300 | let count = this.readContext.reader.readVarUint32Small7(); |
no test coverage detected