varstruct
Version:
encode/decode variable binary structures
31 lines (25 loc) • 1.01 kB
JavaScript
const Buffer = require('safe-buffer').Buffer
module.exports = function (length) {
if (typeof length !== 'number') throw new TypeError('length must be a number')
function encodingLength () {
return length
}
function encode (value, buffer, offset) {
if (!Buffer.isBuffer(value)) throw new TypeError('value must be a Buffer instance')
if (value.length !== length) throw new RangeError('value.length is out of bounds')
if (!buffer) return Buffer.from(value)
if (!offset) offset = 0
if (offset + length > buffer.length) throw new RangeError('destination buffer is too small')
value.copy(buffer, offset)
return buffer
}
function decode (buffer, offset, end) {
if (!offset) offset = 0
if (!end) end = buffer.length
if (offset + length > end) throw new RangeError('not enough data for decode')
return Buffer.from(buffer.slice(offset, offset + length))
}
encode.bytes = decode.bytes = length
return { encode, decode, encodingLength }
}