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
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);
|
|
}
|
|
};
|