create varstruct codec that can match multiple data types.
Each item encoded is prefixed with a type value, I suggest using a byte or a varint.
var varmatch = require('varstruct-match') var varstruct = require('varstruct') var VarUIntProtobuf = require('varint') //create some simple codecs var foobar = varstruct([ { name: 'foo', type: VarUIntProtobuf }, { name: 'bar', type: VarUIntProtobuf } ]) //test functions - return true if the argument can be encoded with this codec. function isFooBar (t) { return t && t.foo && t.bar } function isInteger (n) { return typeof n === 'number' && n % 1 === 0 } var codec = varmatch(VarUIntProtobuf, [ { match: 1, type: foobar, test: isFooBar }, { match: 2, type: varstruct.VarArray(VarUIntProtobuf, foobar), test: Array.isArray }, { match: 3, type: VarUIntProtobuf, test: isInteger } ]) //encode with the first rule codec.encode({ foo: 1, bar: 2 }) //=> <Buffer 01 01 02> //encode with the second rule codec.encode([{ foo: 1, bar: 2 }, { foo: 3, bar: 4 }, { foo: 5, bar: 6 }]) //=> <Buffer 02 03 01 02 03 04 05 06> //encode with the third rule codec.encode(7) //=> <Buffer 03 07>
once the codec is defined, you can just pass any valid object.
varmatch(tagCodec, [typeCodec1, typeCodec2, ..., typeCodecN])create an instance, specifying the codec for the matching field.
MIT
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4