All the types that implement this protocol.
@type t() :: term()
@spec perform(struct(), struct(), binary(), Keyword.t()) :: {:ok, %Eventful.Transition{event: term(), resource: term(), trigger: term()}} | {:error, %Eventful.Error{code: term(), data: term(), message: term()}}