SetObjectSerializer.js 941 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. */
  4. "use strict";
  5. class SetObjectSerializer {
  6. /**
  7. * Serializes this instance into the provided serializer context.
  8. * @template T
  9. * @param {Set<T>} obj set
  10. * @param {import("./ObjectMiddleware").ObjectSerializerContext<(number | T)[]>} context context
  11. */
  12. serialize(obj, context) {
  13. context.write(obj.size);
  14. for (const value of obj) {
  15. context.write(value);
  16. }
  17. }
  18. /**
  19. * Restores this instance from the provided deserializer context.
  20. * @template T
  21. * @param {import("./ObjectMiddleware").ObjectDeserializerContext<(number | T)[]>} context context
  22. * @returns {Set<T>} date
  23. */
  24. deserialize(context) {
  25. const size = /** @type {number} */ (context.read());
  26. /** @type {Set<T>} */
  27. const set = new Set();
  28. for (let i = 0; i < size; i++) {
  29. set.add(/** @type {T} */ (context.read()));
  30. }
  31. return set;
  32. }
  33. }
  34. module.exports = SetObjectSerializer;