Skip to content

Commit

Permalink
Deserialize boxed atoms
Browse files Browse the repository at this point in the history
  • Loading branch information
bartblast committed Oct 18, 2024
1 parent 300de59 commit e6c9e36
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
21 changes: 21 additions & 0 deletions assets/js/deserializer.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
"use strict";

import Type from "./type.mjs";

export default class Deserializer {
static deserialize(serialized, isVersioned = true) {
const deserialized = JSON.parse(serialized, (_key, value) => {
if (typeof value === "string") {
if (value.startsWith("__atom__:")) {
return Type.atom(value.slice(9));
}
}

return value;
});

return isVersioned ? deserialized[1] : deserialized;
}
}

const $ = Deserializer;
44 changes: 44 additions & 0 deletions test/javascript/deserializer_test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"use strict";

import {
assert,
defineGlobalErlangAndElixirModules,
} from "./support/helpers.mjs";

import Deserializer from "../../assets/js/deserializer.mjs";
import Serializer from "../../assets/js/serializer.mjs";
import Type from "../../assets/js/type.mjs";

defineGlobalErlangAndElixirModules();

describe("Deserializer", () => {
describe("deserialize()", () => {
const deserialize = Deserializer.deserialize;
const serialize = Serializer.serialize;

describe("boxed terms", () => {
describe("atom", () => {
it("top-level", () => {
const term = Type.atom("abc");
const serialized = serialize(term);

assert.deepStrictEqual(deserialize(serialized), term);
});

it("nested", () => {
const term = {a: Type.atom("abc"), b: 2};
const serialized = serialize(term);

assert.deepStrictEqual(deserialize(serialized), term);
});

it("not versioned", () => {
const term = Type.atom("abc");
const serialized = serialize(term, true, false);

assert.deepStrictEqual(deserialize(serialized, false), term);
});
});
});
});
});

0 comments on commit e6c9e36

Please sign in to comment.