Packages
A complete and correct Bencode encoder and decoder written in pure Elixir. The decoder will return the info hash with along with the decoded data, and the encoder is implemented as a protocol, allowing any data structure to be bcode encoded.
Current section
Files
Jump to
Current section
Files
lib/bencode.ex
defmodule Bencode do
@type encodable :: binary | atom | Map | List | Integer
@spec encode(encodable) :: {:ok, binary} | {:error, binary}
def encode(data) do
try do
Bencode.Encoder.encode!(data)
rescue
e in Protocol.UndefinedError ->
{:error, "protocol Bencode.Encoder is not implemented for #{inspect e.value}"}
else
result ->
{:ok, result}
end
end
defdelegate encode!(data),
to: Bencode.Encoder
defdelegate decode(data),
to: Bencode.Decoder
defdelegate decode!(data),
to: Bencode.Decoder
defdelegate decode_with_info_hash(data),
to: Bencode.Decoder
defdelegate decode_with_info_hash!(data),
to: Bencode.Decoder
end