MapObjectSerializer.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. */
  4. "use strict";
  5. /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
  6. /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
  7. class MapObjectSerializer {
  8. /**
  9. * Serializes this instance into the provided serializer context.
  10. * @template K, V
  11. * @param {Map<K, V>} obj map
  12. * @param {ObjectSerializerContext} context context
  13. */
  14. serialize(obj, context) {
  15. context.write(obj.size);
  16. for (const key of obj.keys()) {
  17. context.write(key);
  18. }
  19. for (const value of obj.values()) {
  20. context.write(value);
  21. }
  22. }
  23. /**
  24. * Restores this instance from the provided deserializer context.
  25. * @template K, V
  26. * @param {ObjectDeserializerContext} context context
  27. * @returns {Map<K, V>} map
  28. */
  29. deserialize(context) {
  30. /** @type {number} */
  31. const size = context.read();
  32. /** @type {Map<K, V>} */
  33. const map = new Map();
  34. /** @type {K[]} */
  35. const keys = [];
  36. for (let i = 0; i < size; i++) {
  37. keys.push(context.read());
  38. }
  39. for (let i = 0; i < size; i++) {
  40. map.set(keys[i], context.read());
  41. }
  42. return map;
  43. }
  44. }
  45. module.exports = MapObjectSerializer;