from ray.rllib.utils.annotations import override, PublicAPI
from ray.rllib.utils.typing import SampleBatchType


@PublicAPI
class OutputWriter:
    """Writer API for saving experiences from policy evaluation."""

    @PublicAPI
    def write(self, sample_batch: SampleBatchType):
        """Saves a batch of experiences.

        Args:
            sample_batch: SampleBatch or MultiAgentBatch to save.
        """
        raise NotImplementedError


@PublicAPI
class NoopOutput(OutputWriter):
    """Output writer that discards its outputs."""

    @override(OutputWriter)
    def write(self, sample_batch: SampleBatchType):
        # Do nothing.
        pass
