README.md
author Mahlon E. Smith <mahlon@martini.nu>
Tue, 19 May 2015 19:39:32 -0700
changeset 4 800be124db98
parent 3 ef9f89362aac
child 8 67c1c0c716e8
permissions -rw-r--r--
Add value getters for the various TNetstringNode types.

# README #

### What's this? ###

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.

See http://cr.yp.to/proto/netstrings.txt and http://tnetstrings.org/ for
additional information.


### Installation ###

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.

### Usage ###

```
#!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
```

Results in:

```
#!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 )
```

Results in:

```
#!nimrod
   29:4:1000#18:6:thing1,6:thing2,]]
```