class Enum constructor: (@type, @options = []) -> decode: (stream) -> index = @type.decode(stream) return @options[index] or index size: -> @type.size() encode: (stream, val) -> index = @options.indexOf val if index is -1 throw new Error "Unknown option in enum: #{val}" @type.encode(stream, index) module.exports = Enum