You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.1 KiB
JavaScript

'use strict';
module.exports = function createBufferReaderFactory(rules) {
return function createBufferReader(buffer) {
let defaultMethods = {
slice: function readSlice(start, length) {
return buffer.slice(start, start + length);
}
}
let customMethods = Object.keys(rules).map((ruleName) => {
let rule = rules[ruleName];
let readerFunction;
return {
key: ruleName,
value: function(start, length) {
let actualLength;
if (rule.length != null) {
actualLength = rule.length;
} else {
actualLength = length;
}
return rule.decode(buffer.slice(start, start + actualLength));
}
}
}).reduce((methods, item) => {
methods[item.key] = item.value;
return methods;
}, {});
return Object.assign(defaultMethods, customMethods);
}
};