Wrapper around UUID generator: to allow custom uuid generator logic.
@callback generate(any(), any()) :: any()
@callback ref(any()) :: {:ok, any()} | {:error, any()}