README.md

# Screamer

Microlibrary, which adds special function definition macro `def!`, working like this:

* The body of the function should be defined to raise errors in case of exceptional situations.

```elixir
def MyModule
  use Screamer

  def! foo() do
    raise "error"
  end
end
```

* The macro would automaticaly create two functions: with and without screamer:
```bash
iex> MyModule.__info__ :functions
[foo: 0, foo!: 0]
```

* The logics of this functions is based on the Elixir contracts: screamed one raises error or return
value, clear one return `{:ok, value}` or `{:error, error}`:
```elixir
iex> MyModule.foo
{:error, %RuntimeError{message: "error"}}

iex> MyModule.foo!
** (RuntimeError) error
```

## Installation

The package is [available in Hex](https://hex.pm/packages/screamer), and can be installed as:

  1. Add `screamer` to your list of dependencies in `mix.exs`:

    ```elixir
    def deps do
      [{:screamer, "~> 0.1.0"}]
    end
    ```