[![ version](](
[![ downloads](](
[![API Docs](](

# ex_early_ret

An [Elixir] macro for limited early return (expands to nested if-else).

Limited in that you can't return from nested blocks, it's strictly for this kind of thing:

if some_check(a, b)
  return -1

some_var = a + b

if other_check(some_var) && aaaaa
  return -2

some_other_vars = 123 # ...

You could sort of use `cond` for this kind of validation code, but `cond` does not let you define the `some_var` above.


## Installation

Add ex_early_ret to your project's dependencies in `mix.exs`:

def deps do
    {:ex_early_ret, "~> 0.1.0"}

And fetch your project's dependencies:

$ mix deps.get

## Usage

Some examples:

defearlyret fetch(url, check_mention: check_mention) do
  u = URI.parse(url)

  ret_if u.scheme != "http" && u.scheme != "https", do: {:non_http_scheme, u.scheme}

  host =

  ret_if host == nil || host == "localhost" do
    {:local_host, host}

  resp = HttpClient.get!(url, headers: [{"accept", "text/html"}])

{status, body} =
  earlyret do
    redir = conn.body_params["redirect_uri"]

    ret_if is_nil(redir) or !String.starts_with?(redir, "http"),
      do: {:bad_request, "No valid redirect URI"}

    clid = conn.body_params["client_id"]

    ret_if is_nil(clid), do: {:bad_request, "No client ID"}

    ret_if is_nil(conn.body_params["code"]), do: {:bad_request, "No code"}

    tempcode = TempCode.get_if_valid(conn.body_params["code"])

    ret_if is_nil(tempcode), do: {:bad_request, "Code is not valid"}

    ret_if tempcode.redirect_uri != redir,
         "redirect_uri does not match: '#{redir}' vs '#{tempcode.redirect_uri}'"}

    ret_if tempcode.client_id != clid,
      do: {:bad_request, "client_id does not match: '#{clid}' vs '#{tempcode.client_id}'"}


      me: Process.get(:our_home_url)

## Contributing

Please feel free to submit pull requests!

By participating in this project you agree to follow the [Contributor Code of Conduct](

[The list of contributors is available on GitHub](

## License

This is free and unencumbered software released into the public domain.  
For more information, please refer to the `UNLICENSE` file or [](