module.exports = function (storage) {
return function (x) {
var r = storage(x)
return {
write: function (offset, buf, cb) {
if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
r.write(offset, buf, cb)
},
read: function (offset, length, cb) {
r.read(offset, length, cb)
},
len: function (cb) {
if (typeof r.length === 'number') {
process.nextTick(cb, null, r.length)
} else if (typeof r.len === 'function') {
r.len(cb)
} else if (typeof r.length === 'function') {
r.length(cb)
} else {
cb(new Error('len() implementation not provided'))
}
},
truncate: function (length, cb) {
if (typeof r.truncate === 'function') {
r.truncate(length, cb)
} else {
cb(new Error('truncate() implementation not provided'))
}
},
del: function (cb) {
if (typeof r.del === 'function') {
r.del(cb)
} else if (typeof r['delete'] === 'function') {
r['delete'](cb)
} else {
cb(new Error('del() implementation not provided'))
}
},
sync: function (cb) {
if (typeof r.sync === 'function') {
r.sync(cb)
} else {
process.nextTick(cb)
}
}
}
}
}