module EmptyHandlers (emptyUnaryHandler, emptySStreamHandler) where

import Data.ProtoLens (Message (defMessage))
import Network.GRPC.Server (ServerStream (..))
import Network.Wai (Request)

emptyUnaryHandler :: (Monad m, Message o) => (String -> m ()) -> Request -> i -> m o
emptyUnaryHandler logF _ _ = do
  logF "A unary handler is processing a request and generating a reply..."
  return defMessage

emptySStreamHandler ::
  (Monad m, Message o) =>
  (String -> m ()) ->
  Request ->
  i ->
  m (Int, ServerStream m o Int)
emptySStreamHandler logF _ _ =
  return
    ( 0,
      ServerStream $ \n ->
        if n > 3
          then do
            logF "The stream handler is ending the stream"
            return Nothing
          else do
            logF "The stream handler is generating a message"
            return $ Just (n + 1, defMessage)
    )