@callback log(term()) :: Enum.t()
@callback message(term()) :: Enum.t()
@callback subset(term()) :: Enum.t()