(value: Map<any, any>)
| 189 | } |
| 190 | |
| 191 | write(value: Map<any, any>) { |
| 192 | const mapChunkWriter = new MapChunkWriter( |
| 193 | this.writeContext, |
| 194 | this.keySerializer, |
| 195 | this.valueSerializer, |
| 196 | ); |
| 197 | this.writeContext.writer.writeVarUint32Small7(value.size); |
| 198 | for (const [k, v] of value.entries()) { |
| 199 | const keySerializer |
| 200 | = this.keySerializer !== null |
| 201 | ? this.keySerializer |
| 202 | : this.writeContext.typeResolver.getSerializerByData(k); |
| 203 | const valueSerializer |
| 204 | = this.valueSerializer !== null |
| 205 | ? this.valueSerializer |
| 206 | : this.writeContext.typeResolver.getSerializerByData(v); |
| 207 | |
| 208 | const header = mapChunkWriter.next( |
| 209 | new ElementInfo( |
| 210 | keySerializer || null, |
| 211 | k == null, |
| 212 | keySerializer?.needToWriteRef() || false, |
| 213 | ), |
| 214 | new ElementInfo( |
| 215 | valueSerializer || null, |
| 216 | v == null, |
| 217 | valueSerializer?.needToWriteRef() || false, |
| 218 | ), |
| 219 | ); |
| 220 | const keyHeader = header & 0b111; |
| 221 | const valueHeader = header >> 3; |
| 222 | if (mapChunkWriter.isFirst()) { |
| 223 | if ( |
| 224 | !(keyHeader & MapFlags.HAS_NULL) |
| 225 | && !(valueHeader & MapFlags.HAS_NULL) |
| 226 | ) { |
| 227 | if (!(keyHeader & MapFlags.DECL_ELEMENT_TYPE)) { |
| 228 | keySerializer?.writeTypeInfo(null); |
| 229 | } |
| 230 | if (!(valueHeader & MapFlags.DECL_ELEMENT_TYPE)) { |
| 231 | valueSerializer?.writeTypeInfo(null); |
| 232 | } |
| 233 | } |
| 234 | } |
| 235 | |
| 236 | const includeNone |
| 237 | = keyHeader & MapFlags.HAS_NULL || valueHeader & MapFlags.HAS_NULL; |
| 238 | if (!this.writeFlag(keyHeader, k)) { |
| 239 | if (!includeNone) { |
| 240 | keySerializer!.write(k); |
| 241 | } else { |
| 242 | keySerializer!.writeNoRef(k); |
| 243 | } |
| 244 | } |
| 245 | if (!this.writeFlag(valueHeader, v)) { |
| 246 | if (!includeNone) { |
| 247 | valueSerializer!.write(v); |
| 248 | } else { |
nothing calls this directly
no test coverage detected