summaryrefslogtreecommitdiff
path: root/src/Network/DHT/Mainline.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/DHT/Mainline.hs')
-rw-r--r--src/Network/DHT/Mainline.hs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/Network/DHT/Mainline.hs b/src/Network/DHT/Mainline.hs
new file mode 100644
index 00000000..7cd33c0d
--- /dev/null
+++ b/src/Network/DHT/Mainline.hs
@@ -0,0 +1,22 @@
1{-# LANGUAGE LambdaCase #-}
2module Network.DHT.Mainline where
3
4import Network.RPC
5import Network.KRPC.Message
6import Data.BEncode as BE
7import qualified Data.ByteString.Lazy as L
8
9mainline :: Messaging KMessageOf TransactionId BValue
10mainline = Messaging
11 { messageClass = \case Q _ -> Query
12 R _ -> Response
13 E _ -> Error
14 , messageTransaction = \case Q q -> queryId q
15 R r -> respId r
16 E e -> errorId e
17 , messagePayload = \case Q q -> queryArgs q
18 R r -> respVals r
19 E e -> error "TODO: messagePayload for KError"
20 , encodePayload = fmap (L.toStrict . BE.encode)
21 , decodePayload = sequence . fmap BE.decode
22 }