This module implements a simple TNetstring parser and serializer.
TNetString stands for
tagged netstring and is a modification of Dan
Bernstein's netstrings specification. TNetstrings allow for the same
data structures as JSON but in a format that is resistant to buffer
overflows and backward compatible with original netstrings. They make
no assumptions about string contents, allowing for easy transmission of
ascii and binary data mixed with strongly typed values.
The easiest way to install this module is via the nimble package manager, by simply running 'nimble install tnetstring'.
Alternatively, you can fetch the 'tnetstring.nim' file yourself, and put it in a place of your choosing.
#!nimrod import tnetstring let tnetstr = "52:4:test,3:1.3^4:key2,4:true!6:things,12:1:1#1:2#1:3#]}" tnetobj = parse_tnetstring( tnetstr ) # tnetobj is now equivalent to the structure: # @[(key: test, val: 1.3), (key: key2, val: true), (key: things, val: @[1, 2, 3])] assert( tnetobj.kind == TNetstringObject ) echo tnetobj[ "test" ] echo tnetobj[ "key2" ] for item in tnetobj[ "things" ]: echo item
#!nimrod 1.3 true 1 2 3
This module can also be used to reasonably create a serialized TNetstring, suitable for network transmission:
#!nimrod let number = 1000 list = @[ "thing1", "thing2" ] tnettop = newTNetstringArray() # top-level array tnetsub = newTNetstringArray() # sub array tnettop.add( newTNetstringInt(number) ) for item in list: tnetsub.add( newTNetstringString(item) ) tnettop.add( tnetsub ) # Equivalent to: @[1000, @[thing1, thing2]] echo dump_tnetstring( tnettop )