_site/cover/narcs_branch.COVER.html

1 %% Copyright (c) 2023 Peter Morgan <peter.james.morgan@gmail.com>
2 %%
3 %% Licensed under the Apache License, Version 2.0 (the "License");
4 %% you may not use this file except in compliance with the License.
5 %% You may obtain a copy of the License at
6 %%
7 %% http://www.apache.org/licenses/LICENSE-2.0
8 %%
9 %% Unless required by applicable law or agreed to in writing, software
10 %% distributed under the License is distributed on an "AS IS" BASIS,
11 %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 %% See the License for the specific language governing permissions and
13 %% limitations under the License.
14
15 %% @doc Encoder combinators that deal with branches.
16
17
18 -module(narcs_branch).
19
20
21 -export([alt/1]).
22
23
24 -spec alt([narcs:encoder()]) -> narcs:encoder().
25
26 %% @doc Try each alternative encoder until one returns other than
27 %% nomatch.
28
29 alt(Alternatives) ->
30
:-(
fun
31 (Decoded) ->
32
:-(
?FUNCTION_NAME(Alternatives, Decoded)
33 end.
34
35
36 alt([Alternative | Alternatives], Decoded) ->
37
:-(
case Alternative(Decoded) of
38 nomatch ->
39
:-(
?FUNCTION_NAME(Alternatives, Decoded);
40
41 Otherwise ->
42
:-(
Otherwise
43 end;
44
45 alt([], _) ->
46
:-(
nomatch.
Line Hits Source