diff options
| author | ssmith | 2006-05-14 20:56:49 -0700 |
|---|---|---|
| committer | ssmith | 2006-05-14 20:56:49 -0700 |
| commit | 00622aaa2f0844920db2e34b08c96517dbdce41d (patch) | |
| tree | dd7da8cd8fb2993baccac522595d836638f3c3f3 | |
| parent | c4f4a55b60ccc5715437e8b3912efa780c765313 (diff) | |
Add dict encoder and basic test.
| -rw-r--r-- | bencode.erl | 20 | ||||
| -rw-r--r-- | tests.erl | 5 |
2 files changed, 24 insertions, 1 deletions
diff --git a/bencode.erl b/bencode.erl index a335ab9..96eb33f 100644 --- a/bencode.erl +++ b/bencode.erl @@ -7,6 +7,14 @@ %% %% %% %% %% %% %% %% Decoding %% %% %% %% %% %% %% %% +keyenc(Key) when is_list(Key) -> + bencode({string, Key}); +keyenc(Key) when is_atom(Key) -> + bencode({string, atom_to_list(Key)}); +keyenc({string, _} = Key) -> + bencode(Key). + + bencode({int, Val}) -> "i" ++ integer_to_list(Val) ++ "e"; @@ -15,7 +23,17 @@ bencode({string, Val}) -> bencode({list, Val}) -> Fun = fun(A) -> bencode(A) end, - "l" ++ lists:flatten(lists:map(Fun, Val)) ++ "e". + "l" ++ lists:flatten(lists:map(Fun, Val)) ++ "e"; + +bencode({dict, Dict}) -> + SFun = fun({Key1, _}, {Key2, _}) -> + Key1 < Key2 + end, + List = lists:sort(SFun, dict:to_list(Dict)), + MFun = fun({Key, Val}) -> + keyenc(Key) ++ bencode(Val) + end, + "d" ++ lists:flatten(lists:map(MFun, List)) ++ "e". %% %% %% %% %% %% %% %% Decoding %% %% %% %% %% %% %% %% @@ -33,6 +33,11 @@ test_enc_list3() -> {int, 3}]}, {string, "xyz"}]})). +%% Dict encoding tests +test_enc_dict() -> + Dict = dict:from_list([{"age", {int, 25}}, {"eyes", {string, "blue"}}]), + ?match("d3:agei25e4:eyes4:bluee", bencode:bencode({dict, Dict})). + %% Integer decoding tests test_dec_int1() -> |
