Project

tnetstring

0.02
No commit activity in last 3 years
No release in over 3 years
Ruby implementation of the tagged netstring specification, a simple data interchange format better suited to low-level network communication than JSON. See http://tnetstrings.org/ for more details.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
 Dependencies

Development

>= 1.0.12
~> 2.5.0
 Project Readme

tnetstring-rb¶ ↑

Tagged netstrings were conceived by Zed Shaw as a convenient text format for exchanging small amounts of data over the network, based on Dan Bernstein's earlier idea, netstrings. They are meant as an alternative to JSON that are easier to handle in low-level network code and simpler to implement.

The following set of intended characteristics of tagged netstrings is excerpted from the official specification:

  • Trivial to parse in every language without making errors.

  • Resistant to buffer overflows and other problems.

  • Fast and low resource intensive.

  • Makes no assumptions about string contents and can store binary data without escaping or encoding them.

  • Backward compatible with original netstrings.

  • Transport agnostic, so it works with streams, messages, files, anything that's 8-bit clean.

Tagged netstrings support the following primitives: strings, integers, booleans (true or false), null (or nil), lists (arrays), and dictionaries (hashes).

Please see the official spec tnetstrings.org for further detail.

Examples¶ ↑

Given a string in tnetstring format, it can be parsed like so:

str = '5:12345#'
TNetstring.parse(str)

#=> [12345, '']

This returns a tuple that contains the parsed object and any remaining string input.

Encoding an object as a tnetstring is similarly straightforward:

int = 12345
TNetstring.encode(int)

#=> '5:12345#'

Please see the specs in this project for more examples.

Installation¶ ↑

It's a gem, so do the usual:

gem install tnetstring

Attribution¶ ↑

The initial implementation was a port of Zed's first (pre-standardization) tnetstrings implementation in Python.

The Future¶ ↑

Before going 1.0 the library will be converted to a native gem for performance reasons. A native Java/JRuby implementation is planned as well. The current pure Ruby gem may be ported to a tnetstring-pure library.