--- | Tracker response
-data TrackerResponse = TrackerResponse {
- interval :: Maybe Integer
- , peers :: [Peer]
- , complete :: Maybe Integer
- , incomplete :: Maybe Integer
- } deriving (Show, Eq)
-
--- | Deserialize tracker response
-mkTrackerResponse :: BVal -> Either ByteString TrackerResponse
-mkTrackerResponse resp =
- case lookup "failure reason" body of
- Just (Bstr err) -> Left err
- Just _ -> Left "Unknown failure"
- Nothing ->
- let (Just (Bint i)) = lookup "interval" body
- (Just (Bstr peersBS)) = lookup "peers" body
- pl = map makePeer (splitN 6 peersBS)
- in Right TrackerResponse {
- interval = Just i
- , peers = pl
- , complete = Nothing
- , incomplete = Nothing
- }
- where
- (Bdict body) = resp