@callback handle_error( job :: term(), attempt :: integer(), error :: any(), state :: any() ) :: {:retry, new_state :: any()} | {:backoff, delay :: integer()} | :halt | any()
@callback handle_hibernate(state :: any()) :: any()