Skip to content

mahlonsmith/nim-tnetstring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nim TNetstring

Description

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.info/ for additional information.

You can also read the specification here.

Prerequisites

None. This is a pure-nim library.

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

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:

  1.3
  true
  1
  2
  3

This module can also be used to reasonably create a serialized TNetstring, suitable for network transmission:

   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:

   29:4:1000#18:6:thing1,6:thing2,]]

Contributing

You can check out the current development source with Git/Jujutsu via its home repo, or at its project mirror.

After checking out the source, running:

$ nimble setup

... will install dependencies, and do any other necessary setup for development.

Authors

About

TNetstring parsing and serialization for the Nim programming language.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages