tvl-depot/users/Profpatsch/netstring
Profpatsch fed41f4959 feat(users/Profpatsch): set up stow for nix-home
nix-home is (hopefully) gonna be a home-manager alternative for my
home directory.

Files are symlinked into the home directory via GNU stow (since that
is a tried and tested tool), so first step is to set up the base code
for that.

Implements a small tool that reads a single environment variable and
prints it to stdout.

Change-Id: Ifa3fd9f9e1cedc52c3002196d3971b02cb840e80
Reviewed-on: https://cl.tvl.fyi/c/depot/+/4832
Tested-by: BuildkiteCI
Reviewed-by: Profpatsch <mail@profpatsch.de>
Autosubmit: Profpatsch <mail@profpatsch.de>
2022-01-09 09:32:01 +00:00
..
tests refactor(readTree): Move 'drvTargets' into readTree 2021-11-23 14:42:08 +00:00
default.nix feat(users/Profpatsch): set up stow for nix-home 2022-01-09 09:32:01 +00:00
README.md feat(users/Profpatsch/netencode): rename spec -> README 2021-01-23 15:37:26 +00:00

Netstring

Netstrings are a djb invention. They are intended as a serialization format. Instead of inline control characters like \n or \0 to signal the end of a string, they use a run-length encoding given as the number of bytes, encoded in ASCII, at the beginning of the string.

hello -> 5:hello,
foo! -> 4:foo!,
こんにちは -> 15:こんにちは,

They can be used to encode e.g. lists by simply concatenating and reading them in one-by-one.

If you need a more complex encoding, you could start encoding e.g. tuples as netstrings-in-netstrings, or you could use netencode instead, which is what-if-json-but-netstrings, and takes the idea of netstrings to their logical conclusion.

Resources:

Spec: http://cr.yp.to/proto/netstrings.txt Wiki: https://en.wikipedia.org/wiki/Netstring