summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUENISHI Kota <kuenishi+github@gmail.com>2010-07-18 23:48:20 +0900
committerUENISHI Kota <kuenishi+github@gmail.com>2010-07-18 23:48:20 +0900
commit6cabad19d5a576e3e44e069c0a2b107bd33d30ef (patch)
treeee11ac143db3f3fbcdf3c91b30e3e670e529990f
parentdad7a03d1975c28574fb768e10a63355832a0474 (diff)
downloadmsgpack-python-6cabad19d5a576e3e44e069c0a2b107bd33d30ef.tar.gz
erlang: unpack_all/1 improve, error handling added.
-rw-r--r--erlang/msgpack.erl16
1 files changed, 11 insertions, 5 deletions
diff --git a/erlang/msgpack.erl b/erlang/msgpack.erl
index 13bb8e1..d4a0bc8 100644
--- a/erlang/msgpack.erl
+++ b/erlang/msgpack.erl
@@ -80,16 +80,22 @@ unpack(Bin) when is_binary(Bin) ->
unpack(Other) ->
{error, {badarg, Other}}.
--spec unpack_all(binary()) -> [msgpack_term()].
+-spec unpack_all(binary()) -> [msgpack_term()] | {error, incomplete} | {error, {badarg, term()}}.
unpack_all(Data)->
- case unpack(Data) of
- { Term, Binary } when bit_size(Binary) =:= 0 ->
+ try
+ unpack_all_(Data)
+ catch
+ throw:Exception ->
+ {error, Exception}
+ end.
+unpack_all_(Data)->
+ case unpack_(Data) of
+ { Term, <<>> } ->
[Term];
{ Term, Binary } when is_binary(Binary) ->
- [Term|unpack_all(Binary)]
+ [Term|unpack_all_(Binary)]
end.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% internal APIs
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%