{-# LANGUAGE LambdaCase #-} module Network.DHT.Mainline where import Network.RPC import Network.KRPC.Message import Data.BEncode as BE import qualified Data.ByteString.Lazy as L mainline :: Messaging KMessageOf TransactionId BValue mainline = Messaging { messageClass = \case Q _ -> Query R _ -> Response E _ -> Error , messageTransaction = \case Q q -> queryId q R r -> respId r E e -> errorId e , messagePayload = \case Q q -> queryArgs q R r -> respVals r E e -> error "TODO: messagePayload for KError" , encodePayload = fmap (L.toStrict . BE.encode) , decodePayload = sequence . fmap BE.decode }