binary = require 'binary'
_ = require 'lodash'
unwrap = (buffer) ->
binary.parse buffer
.tap header
.vars
# Parse a header.
header = (buffer) ->
this.into 'header', (vars) ->
this.tap varint32('length', buffer)
.tap varint32('opcode', buffer)
.tap (vars) ->
# flatten the resulting structure by turning
# { length: { value: A, size: B }, opcode: { value: C, size: D }}
# into { length: A, value: C, size: B+D }
# there is definitely a better way to do this using _.