SetObjectSerializer.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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 SetObjectSerializer {
  8. /**
  9. * Serializes this instance into the provided serializer context.
  10. * @template T
  11. * @param {Set<T>} obj set
  12. * @param {ObjectSerializerContext} context context
  13. */
  14. serialize(obj, context) {
  15. context.write(obj.size);
  16. for (const value of obj) {
  17. context.write(value);
  18. }
  19. }
  20. /**
  21. * Restores this instance from the provided deserializer context.
  22. * @template T
  23. * @param {ObjectDeserializerContext} context context
  24. * @returns {Set<T>} date
  25. */
  26. deserialize(context) {
  27. /** @type {number} */
  28. const size = context.read();
  29. /** @type {Set<T>} */
  30. const set = new Set();
  31. for (let i = 0; i < size; i++) {
  32. set.add(context.read());
  33. }
  34. return set;
  35. }
  36. }
  37. module.exports = SetObjectSerializer;