Implementations

The data pointer can be used to store arbitrary data as required
by the executor. This could be e.g. a type-erased pointer to an Arc
that is associated with the task.
The value of this pointer will get passed to all functions that are part
of the vtable as the first parameter.

The vtable customizes the behavior of a Waker which gets created
from a RawWaker. For each operation on the Waker, the associated
function in the vtable of the underlying RawWaker will be called.