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