# `locus_maxmind_download`
[🔗](https://github.com/g-andrade/locus/blob/2.3.15/src/locus_maxmind_download.erl#L24)

Downloads an unpacked database edition from MaxMind, as well as its checksum
(which it then verifies), without blocking the caller.

# `event`

```erlang
-type event() :: locus_http_download:event() | {checksum, locus_http_download:event()}.
```

# `msg`

```erlang
-type msg() ::
          {event, event()} |
          {finished, {error, no_license_key_defined}} |
          {finished, {error, {checksum_download, term()}}} |
          {finished, {error, {bad_checksum, #{expected := binary(), actual := binary()}}}} |
          {finished, {error, {bad_checksum_format, binary()}}} |
          locus_http_download:msg().
```

# `opt`

```erlang
-type opt() :: {license_key, binary() | string()} | {date, calendar:date()} | locus_http_download:opt().
```

# `state`

```erlang
-opaque state()
```

# `success`

```erlang
-type success() :: locus_http_download:success().
```

# `code_change`

```erlang
-spec code_change(term(), state(), term()) -> {ok, state()}.
```

# `handle_call`

```erlang
-spec handle_call(term(), {pid(), reference()}, state()) -> {stop, unexpected_call, state()}.
```

# `handle_cast`

```erlang
-spec handle_cast(term(), state()) -> {stop, unexpected_cast, state()}.
```

# `handle_info`

```erlang
-spec handle_info(term(), state()) ->
                     {noreply, state()} |
                     {stop, normal, state()} |
                     {stop, {database_download_stopped, pid(), term()}, state()} |
                     {stop, {checksum_download_stopped, pid(), term()}, state()} |
                     {stop, unexpected_info, state()}.
```

# `init`

```erlang
-spec init(_) -> no_return().
```

# `proc_lib_init`

```erlang
-spec proc_lib_init([InitArg, ...]) -> no_return()
                       when
                           InitArg :: OwnerPid | Edition | RequestHeaders | Opts,
                           OwnerPid :: pid(),
                           Edition :: atom(),
                           RequestHeaders :: locus_http_download:headers(),
                           Opts :: [opt()].
```

# `start_link`

```erlang
-spec start_link(atom(), locus_http_download:headers(), [opt()]) -> {ok, pid()}.
```

# `terminate`

```erlang
-spec terminate(term(), state()) -> ok.
```

# `validate_opts`

```erlang
-spec validate_opts(proplists:proplist()) ->
                       {ok, {[opt()], proplists:proplist()}} | {error, BadOpt :: term()}.
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
