summaryrefslogtreecommitdiff
path: root/src/Network/DHT/Mainline.hs
blob: 7cd33c0db5c486bb317404266b2367a984e09380 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{-# 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
    }