from sqlalchemy import orm
from couchers.context import CouchersContext
"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""

import abc
import api_pb2
import collections.abc
import google.protobuf.empty_pb2
import grpc
import grpc.aio
import typing


GRPC_GENERATED_VERSION: str
GRPC_VERSION: str

class APIStub:
    def __init__(self, channel: grpc.Channel) -> None: ...
    Ping: grpc.UnaryUnaryMultiCallable[api_pb2.PingReq, api_pb2.PingRes]
    """Pings the server for updates and basic user info"""
    GetUser: grpc.UnaryUnaryMultiCallable[api_pb2.GetUserReq, api_pb2.User]
    """Get info about a particular user"""
    GetLiteUser: grpc.UnaryUnaryMultiCallable[api_pb2.GetLiteUserReq, api_pb2.LiteUser]
    """Get minimal info about a particular user"""
    GetLiteUsers: grpc.UnaryUnaryMultiCallable[api_pb2.GetLiteUsersReq, api_pb2.GetLiteUsersRes]
    """Get minimal info about a bunch of users"""
    UpdateProfile: grpc.UnaryUnaryMultiCallable[api_pb2.UpdateProfileReq, google.protobuf.empty_pb2.Empty]
    """Update your profile
    *Nullable can be set to null to clear the value. is_null defaults to false.
    """
    SendFriendRequest: grpc.UnaryUnaryMultiCallable[api_pb2.SendFriendRequestReq, google.protobuf.empty_pb2.Empty]
    ListFriendRequests: grpc.UnaryUnaryMultiCallable[google.protobuf.empty_pb2.Empty, api_pb2.ListFriendRequestsRes]
    ListFriends: grpc.UnaryUnaryMultiCallable[google.protobuf.empty_pb2.Empty, api_pb2.ListFriendsRes]
    RemoveFriend: grpc.UnaryUnaryMultiCallable[api_pb2.RemoveFriendReq, google.protobuf.empty_pb2.Empty]
    ListMutualFriends: grpc.UnaryUnaryMultiCallable[api_pb2.ListMutualFriendsReq, api_pb2.ListMutualFriendsRes]
    """List mutual friends between requester and requested user
    When called on self, returns empty list
    """
    RespondFriendRequest: grpc.UnaryUnaryMultiCallable[api_pb2.RespondFriendRequestReq, google.protobuf.empty_pb2.Empty]
    CancelFriendRequest: grpc.UnaryUnaryMultiCallable[api_pb2.CancelFriendRequestReq, google.protobuf.empty_pb2.Empty]
    InitiateMediaUpload: grpc.UnaryUnaryMultiCallable[google.protobuf.empty_pb2.Empty, api_pb2.InitiateMediaUploadRes]
    """Initiate a media upload"""
    ListBadgeUsers: grpc.UnaryUnaryMultiCallable[api_pb2.ListBadgeUsersReq, api_pb2.ListBadgeUsersRes]
    """Lists users with a given badge"""

class APIServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def Ping(
        self,
        request: api_pb2.PingReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.PingRes:
        """Pings the server for updates and basic user info"""

    @abc.abstractmethod
    def GetUser(
        self,
        request: api_pb2.GetUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.User:
        """Get info about a particular user"""

    @abc.abstractmethod
    def GetLiteUser(
        self,
        request: api_pb2.GetLiteUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.LiteUser:
        """Get minimal info about a particular user"""

    @abc.abstractmethod
    def GetLiteUsers(
        self,
        request: api_pb2.GetLiteUsersReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.GetLiteUsersRes:
        """Get minimal info about a bunch of users"""

    @abc.abstractmethod
    def UpdateProfile(
        self,
        request: api_pb2.UpdateProfileReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Update your profile
        *Nullable can be set to null to clear the value. is_null defaults to false.
        """

    @abc.abstractmethod
    def SendFriendRequest(
        self,
        request: api_pb2.SendFriendRequestReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def ListFriendRequests(
        self,
        request: google.protobuf.empty_pb2.Empty,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.ListFriendRequestsRes: ...

    @abc.abstractmethod
    def ListFriends(
        self,
        request: google.protobuf.empty_pb2.Empty,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.ListFriendsRes: ...

    @abc.abstractmethod
    def RemoveFriend(
        self,
        request: api_pb2.RemoveFriendReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def ListMutualFriends(
        self,
        request: api_pb2.ListMutualFriendsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.ListMutualFriendsRes:
        """List mutual friends between requester and requested user
        When called on self, returns empty list
        """

    @abc.abstractmethod
    def RespondFriendRequest(
        self,
        request: api_pb2.RespondFriendRequestReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def CancelFriendRequest(
        self,
        request: api_pb2.CancelFriendRequestReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def InitiateMediaUpload(
        self,
        request: google.protobuf.empty_pb2.Empty,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.InitiateMediaUploadRes:
        """Initiate a media upload"""

    @abc.abstractmethod
    def ListBadgeUsers(
        self,
        request: api_pb2.ListBadgeUsersReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.ListBadgeUsersRes:
        """Lists users with a given badge"""

def add_APIServicer_to_server(servicer: APIServicer, server: grpc.Server) -> None: ...
