diff options
author | Björn Gustavsson <[email protected]> | 2013-09-24 10:28:16 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2013-09-27 10:44:49 +0200 |
commit | 0f430abcb189988a7faf55386557b2b74afa6f56 (patch) | |
tree | 71915a21f54b442c32fcfbc880872cc7c98b6561 /lib/asn1/test/test_undecoded_rest.erl | |
parent | e5210c4bc75f561383ec4f94e3dce15440f1c269 (diff) | |
download | otp-0f430abcb189988a7faf55386557b2b74afa6f56.tar.gz otp-0f430abcb189988a7faf55386557b2b74afa6f56.tar.bz2 otp-0f430abcb189988a7faf55386557b2b74afa6f56.zip |
Teach the ASN.1 compiler the no_ok_wrapper option
Add the no_ok_wrapper option so that the generated M:encode/2 and
M:decode/2 functions will not wrap a successful return value in an
{ok,...} tuple. Errors will cause exceptions.
Eliminating the wrapping tuple allows simpler nesting of calls.
Diffstat (limited to 'lib/asn1/test/test_undecoded_rest.erl')
-rw-r--r-- | lib/asn1/test/test_undecoded_rest.erl | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/lib/asn1/test/test_undecoded_rest.erl b/lib/asn1/test/test_undecoded_rest.erl index fe04178bb1..91e614d38a 100644 --- a/lib/asn1/test/test_undecoded_rest.erl +++ b/lib/asn1/test/test_undecoded_rest.erl @@ -26,21 +26,42 @@ %% testing OTP-5104 -test(Opt, Config) -> +test(Opts, Config) -> {ok,Msg} = asn1ct:value('P-Record', 'PersonnelRecord', [{i,?config(case_dir, Config)}]), - {ok,Bytes0} = 'P-Record':encode('PersonnelRecord', Msg), + Bytes0 = encode(Opts, 'PersonnelRecord', Msg), Bytes1 = iolist_to_binary([Bytes0, <<55,55,55>>]), - case Opt of - undec_rest -> - {ok,Msg,R} = 'P-Record':decode('PersonnelRecord', Bytes1), + case proplists:get_bool(undec_rest, Opts) of + true -> + {Msg,R} = decode(Opts, 'PersonnelRecord', Bytes1), case R of - <<55,55,55>> -> ok; + <<55,55,55>> -> + ok; BStr when is_bitstring(BStr) -> PadLen = (8 - (bit_size(BStr) rem 8)) rem 8, <<0,55,55,55>> = <<0:PadLen, BStr/bitstring>> end; - _ -> - {ok,Msg} = 'P-Record':decode('PersonnelRecord', Bytes1) + false -> + Msg = decode(Opts, 'PersonnelRecord', Bytes1) end, ok. + +encode(Opts, T, V) -> + M = 'P-Record', + case proplists:get_bool(no_ok_wrapper, Opts) of + false -> + {ok,Enc} = M:encode(T, V), + Enc; + true -> + Enc = M:encode(T, V), + true = is_binary(Enc), + Enc + end. + +decode(Opts, T, E) -> + M = 'P-Record', + case {proplists:get_bool(no_ok_wrapper, Opts),M:decode(T, E)} of + {false,{ok,Val}} -> Val; + {false,{ok,Val,Rest}} -> {Val,Rest}; + {true,Result} -> Result + end. |