UNPKG

diffusion

Version:

Diffusion JavaScript client

50 lines (39 loc) 1.37 kB
var AbstractDataType = require('data/abstract-datatype'); var BytesImpl = require('data/bytes-impl'); var JSONImpl = require('data/json/json-impl'); var Encoder = require('cbor/encoder'); var Decoder = require('cbor/decoder'); var encoder = new Encoder(); var NULL_CBOR = new BytesImpl(new Buffer([0xf6])); module.exports = function(name, valueClass, serialise, withBinaryDelta, cborTypePredicate) { function vToC(value) { serialise(value, encoder); return new BytesImpl(encoder.flush()); } function cToV(bytes) { if (NULL_CBOR.equals(bytes)) { return null; } var decoder = new Decoder(bytes.$buffer, bytes.$offset, bytes.$length); return decoder.nextValueExpecting(cborTypePredicate); } AbstractDataType.call(this, name, valueClass, BytesImpl, vToC, cToV, [JSONImpl], withBinaryDelta); this.writeValue = function(value) { if (value === null || value === undefined) { return NULL_CBOR.asBuffer(); } else { serialise(value, encoder); return encoder.flush(); } }; this.validate = function() { // No-op. This data type validates on read. }; this.from = function(value) { if (value.$buffer) { return value; } else { return vToC(value); } }; };