"""Provide the SavableMixin class."""
from ....const import API_PATH


class SavableMixin:
    """Interface for RedditBase classes that can be saved."""

    def save(self, category=None):
        """Save the object.

        :param category: (Premium) The category to save to. If your user does
            not have Reddit Premium this value is ignored by Reddit
            (default: ``None``).

        Example usage:

        .. code-block:: python

           submission = reddit.submission(id='5or86n')
           submission.save(category="view later")

           comment = reddit.comment(id='dxolpyc')
           comment.save()

        See also :meth:`~.unsave`

        """
        self._reddit.post(
            API_PATH["save"], data={"category": category, "id": self.fullname}
        )

    def unsave(self):
        """Unsave the object.

        Example usage:

        .. code-block:: python

           submission = reddit.submission(id='5or86n')
           submission.unsave()

           comment = reddit.comment(id='dxolpyc')
           comment.unsave()

        See also :meth:`~.save`

        """
        self._reddit.post(API_PATH["unsave"], data={"id": self.fullname})

"""Provide the SavableMixin class."""
from typing import Optional
from ....const import API_PATH


class SavableMixin:
    """Interface for RedditBase classes that can be saved."""

    def save(self, category: Optional[str] = None):
        """Save the object.

        :param category: (Premium) The category to save to. If your user does
            not have Reddit Premium this value is ignored by Reddit
            (default: ``None``).

        Example usage:

        .. code-block:: python

           submission = reddit.submission(id='5or86n')
           submission.save(category="view later")

           comment = reddit.comment(id='dxolpyc')
           comment.save()

        See also :meth:`~.unsave`

        """
        self._reddit.post(
            API_PATH["save"], data={"category": category, "id": self.fullname}
        )

    def unsave(self):
        """Unsave the object.

        Example usage:

        .. code-block:: python

           submission = reddit.submission(id='5or86n')
           submission.unsave()

           comment = reddit.comment(id='dxolpyc')
           comment.unsave()

        See also :meth:`~.save`

        """
        self._reddit.post(API_PATH["unsave"], data={"id": self.fullname})

Add types to praw/models/reddit/mixins/savable.py