]> git.rkrishnan.org Git - functorrent.git/blobdiff - src/FuncTorrent/MagnetURI.hs
More consistency of types between magneturi/metainfo parsing
[functorrent.git] / src / FuncTorrent / MagnetURI.hs
index 7a9b20ed01a89dc67e2564b16724627f3422cb72..506a169e156e88d43ade708efb772570e05098eb 100644 (file)
@@ -69,13 +69,17 @@ magnetBody = do
   pairs <- kvpair `sepBy1` (char '&')
   -- walk through pairs, populate Magnetinfo (fold?)
   return $ foldl f magnetInfo pairs
-    where f magnetRecord pair = let (k, v) = pair in
-            case k of
-              "xt" -> magnetRecord { infoHash = pack v }
-              "tr" -> let trVal = trackerlist magnetRecord in
-                        magnetRecord { trackerlist = trVal ++ [urlDecode v] }
-              "dn" -> magnetRecord { name = urlDecode v }
-              "xl" -> magnetRecord { xlen = Just (read v :: Integer) }
+    where f magnetRecord pair =
+            let (k, v) = pair
+            in
+              case k of
+                "xt" -> magnetRecord { infoHash = pack v }
+                "tr" -> let trVal = trackerlist magnetRecord
+                        in
+                          magnetRecord { trackerlist = trVal ++ [urlDecode v] }
+                "dn" -> magnetRecord { name = urlDecode v }
+                "xl" -> magnetRecord { xlen = Just (read v :: Integer) }
+                _    -> magnetInfo
           magnetInfo = Magnetinfo { infoHash = mempty
                                   , trackerlist = mempty
                                   , name = mempty
@@ -84,5 +88,8 @@ magnetBody = do
 magnetUri :: ParsecBS.Parser Magnetinfo
 magnetUri = magnetHdr >> magnetBody
 
-parseMagneturi :: ByteString -> Either ParseError Magnetinfo
-parseMagneturi input = parse magnetUri "magnetParse" input
+parseMagneturi :: ByteString -> Either String Magnetinfo
+parseMagneturi input =
+  case parse magnetUri "magnetParse" input of
+    Right minfo -> Right minfo
+    Left e -> Left $ "Cannot parse the magnet URI: " ++ show e