# `RaftedValue.LeaderHook`
[🔗](https://github.com/skirino/rafted_value/blob/main/lib/rafted_value/leader_hook.ex#L1)

A behaviour module for hooks that are invoked in leader.

Note that there are cases where hooks are invoked multiple times for a single event due to leader change.

# `neglected`

```elixir
@type neglected() :: any()
```

# `on_command_committed`

```elixir
@callback on_command_committed(
  data_before_command :: RaftedValue.Data.data(),
  command_arg :: RaftedValue.Data.command_arg(),
  command_ret :: RaftedValue.Data.command_ret(),
  data_after_command :: RaftedValue.Data.data()
) :: neglected()
```

Hook to be called when a command submitted by `RaftedValue.command/4` is committed.

# `on_elected`

```elixir
@callback on_elected(RaftedValue.Data.data()) :: neglected()
```

Hook to be called when a new leader is elected in a consensus group.

# `on_follower_added`

```elixir
@callback on_follower_added(RaftedValue.Data.data(), pid()) :: neglected()
```

Hook to be called when a new follower is added to a consensus group
by `RaftedValue.start_link/2` with `:join_existing_consensus_group` specified.

# `on_follower_removed`

```elixir
@callback on_follower_removed(RaftedValue.Data.data(), pid()) :: neglected()
```

Hook to be called when a follower is removed from a consensus group by `RaftedValue.remove_follower/2`.

# `on_query_answered`

```elixir
@callback on_query_answered(
  data :: RaftedValue.Data.data(),
  query_arg :: RaftedValue.Data.query_arg(),
  query_ret :: RaftedValue.Data.query_ret()
) :: neglected()
```

Hook to be called when a query given by `RaftedValue.query/3` is executed.

# `on_restored_from_files`

```elixir
@callback on_restored_from_files(RaftedValue.Data.data()) :: neglected()
```

Hook to be called when a new leader restores its state from snapshot & log files.

---

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