diff options
| author | UENISHI Kota <kuenishi+github@gmail.com> | 2010-07-18 23:48:20 +0900 |
|---|---|---|
| committer | UENISHI Kota <kuenishi+github@gmail.com> | 2010-07-18 23:48:20 +0900 |
| commit | 6cabad19d5a576e3e44e069c0a2b107bd33d30ef (patch) | |
| tree | ee11ac143db3f3fbcdf3c91b30e3e670e529990f | |
| parent | dad7a03d1975c28574fb768e10a63355832a0474 (diff) | |
| download | msgpack-python-6cabad19d5a576e3e44e069c0a2b107bd33d30ef.tar.gz | |
erlang: unpack_all/1 improve, error handling added.
| -rw-r--r-- | erlang/msgpack.erl | 16 |
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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
