Bottle provides a set of custom guards which help reduce a lot of boilerplate coode.
You can find the package in hex.pm and the documentation in hexdocs.pm.
The the package can be installed from Hex,
by adding bottle
to your list of dependencies in mix.exs
:
def deps do
[
{:bottle, "~> 1.0"}
]
end
Just put use Bottle
on top of your module and get all the guards available in your scope:
defmodule MyModule do
use Bottle
def what_is(sub) when is_empty_binary(sub) do
:empty_binary
end
def what_is(sub) when is_non_empty_binary_shorter_than(sub, 10) do
:non_empty_binary_shorter_than_10_bytes
end
def what_is(sub) when is_non_empty_map(sub) do
:non_empty_map
end
def what_is(sub) when is_empty_map(sub) do
:empty_map
end
def what_is(sub) when is_zero(sub) do
:zero_integer_or_float
end
def what_is(sub) when is_pos_number(sub) do
:number_greater_than_0
end
def what_is(sub) when is_non_neg_integer(sub) do
:integer_equal_or_greater_than_0
end
def what_is(sub) when is_non_zero_float(sub) do
:non_zero_float
end
end
You can also import the guards selectively using import
, ie:
import Bottle.Binary, only: [is_empty_binary: 1]
You can find the complete list of guards in the documentation: https://hexdocs.pm/bottle.
Bottle is available under the BSD 3-Clause aka "BSD New" license