3.1.0 • Published 8 years ago

varstruct-match v3.1.0

Weekly downloads
3
License
MIT
Repository
github
Last release
8 years ago

varstruct-match

NPM Package Build Status Dependency status

abstract-encoding

js-standard-style

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.

Example

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.

API

varmatch(tagCodec, typeCodec1, typeCodec2, ..., typeCodecN)

create an instance, specifying the codec for the matching field.

License

MIT

3.1.0

8 years ago

3.0.0

8 years ago

2.0.1

10 years ago

2.0.0

10 years ago

1.0.0

10 years ago