MapObjectSerializer.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. * @template K, V
  10. * @param {Map<K, V>} obj map
  11. * @param {ObjectSerializerContext} context context
  12. */
  13. serialize(obj, context) {
  14. context.write(obj.size);
  15. for (const key of obj.keys()) {
  16. context.write(key);
  17. }
  18. for (const value of obj.values()) {
  19. context.write(value);
  20. }
  21. }
  22. /**
  23. * @template K, V
  24. * @param {ObjectDeserializerContext} context context
  25. * @returns {Map<K, V>} map
  26. */
  27. deserialize(context) {
  28. /** @type {number} */
  29. let size = context.read();
  30. /** @type {Map<K, V>} */
  31. const map = new Map();
  32. /** @type {K[]} */
  33. const keys = [];
  34. for (let i = 0; i < size; i++) {
  35. keys.push(context.read());
  36. }
  37. for (let i = 0; i < size; i++) {
  38. map.set(keys[i], context.read());
  39. }
  40. return map;
  41. }
  42. }
  43. module.exports = MapObjectSerializer;