types/Varint.js

const TranscodableType = require('../Type');
const Exceptions = require('../exceptions');

const varint = require('varint');

/**
 * @class
 * A variable length encoded integer.
 * @description Equivalent to Protobuf's Varint.
 * @augments TranscodableType
 */
class Varint extends TranscodableType {
	compiledEncoder(source_var){
		return `if(typeof ${source_var} !== 'number')
			throw new Exceptions.InvalidEncodeValue('Varint expected a number, got '+(typeof ${source_var}));
		varint.encode(${source_var}, buffer, position);
		position += varint.encode.bytes;`;
	}
	compiledDecoder(target_var){
		return `${target_var} = varint.decode(buffer, position);
		position += varint.decode.bytes;`
	}
}

module.exports = Varint;