Package Exports
- protodef
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (protodef) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ProtoDef
[
]
(https://circleci.com/gh/roblabla/ProtoDef)
This is a node.js module to simplify defining, reading and writing binary blobs, whether they be internet protocols or files.
Installing
npm install ProtoDefUsage
See example
API
ProtoDef()
ProtoDef.addType(name,functions)
Add the type name with the data functions which can be either:
- "native" : that type is already implemented by ProtoDef
- a js object defining a type based on other already defined types
[read,write,sizeOf]functions
ProtoDef.read(buffer, cursor, _fieldInfo, rootNodes)
Read the packet defined by _fieldInfo in buffer starting from cursor using the context rootNodes.
ProtoDef.write(value, buffer, offset, _fieldInfo, rootNode)
Write the packet defined by _fieldInfo in buffer starting from offset with the value value and context rootNode
ProtoDef.sizeOf(value, _fieldInfo, rootNode)
Size of the packet value defined by _fieldInfo with context rootNode
ProtoDef.createPacketBuffer(type,packet)
Returns a buffer of the packet for type.
ProtoDef.parsePacketBuffer(type,buffer)
Returns a parsed packet of buffer for type.
Serializer(proto,mainType)
Create a serializer of mainType defined in proto. This is a Transform stream.
Serializer.createPacketBuffer(packet)
Returns a buffer of the packet.
Parser(proto,mainType)
Create a parser of mainType defined in proto. This is a Transform stream.
Parser.parsePacketBuffer(buffer)
Returns a parsed packet of buffer.
types
An object mapping the default type names to the corresponding [read,write,sizeOf] functions.
utils
Some functions that can be useful to build new datatypes reader and writer.
utils.getField(countField, context)
Get countField given context. Example: "../field" will get "field" one level above.
utils.getFieldInfo(fieldInfo)
Takes fieldInfo as :
"type"["type",typeArgs]{ type: "type", typeArgs: typeArgs }
Returns { type: "type", typeArgs: typeArgs }
utils.addErrorField(e, field)
Add field to error e and throw e.
utils.tryCatch(tryfn, catchfn)
A simple tryCatch function, useful for optimization. returns what tryfn returns
utils.tryDoc(tryfn, field)
Try tryfn, it it fails, use addErrorField with field
TODO
- Write tests for every datatypes, and the different *Field behaviors.
- Rethink datatype function signature
- Datatypes should include name when creating them, instead of being provided by the user, to ease datatype dependencies.
- Probably more...
History
0.2.3
- fix a small mistake in mapping error
- improve internal code
- improve example
- integrate with tonicdev
0.2.2
- Fix writeOption : the offset wasn't properly updated
0.2.1
- Anon fields may now be null/undefined.
0.2.0
- add createPacketBuffer and parsePacketBuffer to ProtoDef class
- expose utils functions
- add mapper and pstring datatypes
0.1.0
- add the serializer and parser
- expose the default datatypes
- add an example
0.0.1
- basic version, mostly contain the ProtoDef class and the datatype