HEX
Server: LiteSpeed
System: Linux server.zepintelhosting.com 4.18.0 #1 SMP Mon Sep 30 15:36:27 MSK 2024 x86_64
User: enamadmin (1026)
PHP: 8.2.30
Disabled: exec,system,passthru,shell_exec,proc_open,popen,apache_child_terminate
Upload Files
File: /home/enamadmin/moodledata/filedir/47/24/47241c42ce6ef9cc556bbc24ea64b2926b2f77f4
/*
	MIT License http://www.opensource.org/licenses/mit-license.php
*/

"use strict";

/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */

class NullPrototypeObjectSerializer {
	/**
	 * @template {Object} T
	 * @param {T} obj null object
	 * @param {ObjectSerializerContext} context context
	 */
	serialize(obj, context) {
		/** @type {string[]} */
		const keys = Object.keys(obj);
		for (const key of keys) {
			context.write(key);
		}
		context.write(null);
		for (const key of keys) {
			context.write(obj[key]);
		}
	}
	/**
	 * @template {Object} T
	 * @param {ObjectDeserializerContext} context context
	 * @returns {T} null object
	 */
	deserialize(context) {
		/** @type {T} */
		const obj = Object.create(null);
		/** @type {string[]} */
		const keys = [];
		/** @type {string | null} */
		let key = context.read();
		while (key !== null) {
			keys.push(key);
			key = context.read();
		}
		for (const key of keys) {
			obj[key] = context.read();
		}
		return obj;
	}
}

module.exports = NullPrototypeObjectSerializer;