@dipscope/type-manager
Version:
Transform JSON strings or plain objects into JS class instances.
36 lines • 1.48 kB
JavaScript
export class DataViewSerializer {
serialize(x, serializerContext) {
if (x === undefined) {
return serializerContext.serializedDefaultValue;
}
if (x === null) {
return serializerContext.serializedNullValue;
}
if (x instanceof DataView) {
const arrayBufferView = new Uint16Array(x.buffer);
const charCodeArray = Array.from(arrayBufferView);
return charCodeArray.map(c => String.fromCharCode(c)).join('');
}
serializerContext.logger.error('DataViewSerializer', `${serializerContext.jsonPath}: cannot serialize value as data view.`, x);
return undefined;
}
deserialize(x, serializerContext) {
if (x === undefined) {
return serializerContext.deserializedDefaultValue;
}
if (x === null) {
return serializerContext.deserializedNullValue;
}
if (typeof x === 'string') {
const arrayBuffer = new ArrayBuffer(x.length * 2);
const arrayBufferView = new Uint16Array(arrayBuffer);
for (let i = 0; i < x.length; i++) {
arrayBufferView[i] = x.charCodeAt(i);
}
return new DataView(arrayBuffer);
}
serializerContext.logger.error('DataViewSerializer', `${serializerContext.jsonPath}: cannot deserialize value as data view.`, x);
return undefined;
}
}
//# sourceMappingURL=data-view-serializer.js.map