Benlixir

This module decodes bencode. Its designed to be used as part of a bittorrent client or library of some sort.

What I learned

I had implemented something similair to this in Go, which was relatively straightforward. In Elixir, all looping has to be done through recursion, and so this was a fun exercise in that topic. I built it using TDD.

Essentially, the main entry point of the code is Benlixir.Decoder.decode("becodede string"). This function kicks off a recusive loop which nibbles away at our input string and passes along a main map. This master data structure is slowly filled in by a number of subfunctions and recursive calls. Pattern matching makes this really nice, as our remaining string is properly dispatched to specific type decoding functions for int, map, list, and string based on the patterns of the string. Pattern matching also simplifies the recursion of the subfunctions by matching on, for example "e"<>rest to terminate a map represented in the bencode string.

To be done