, md5sum = md5sum'}
mkInfo _ = Nothing
-mkMetaInfo :: BVal -> Maybe Metainfo
+mkMetaInfo :: BVal -> Either String Metainfo
mkMetaInfo (Bdict m) =
let (Just info') = mkInfo $ m ! "info"
announce' = lookup "announce" m
comment' = lookup "comment" m
createdBy' = lookup "created by" m
encoding' = lookup "encoding" m
- in Just Metainfo {
- info = info'
- , announceList = maybeToList (announce' >>= bstrToString)
- ++ getAnnounceList announceList'
- , creationDate = bValToInteger =<< creationDate'
- , comment = bstrToString =<< comment'
- , createdBy = bstrToString =<< createdBy'
- , encoding = bstrToString =<< encoding'
- , infoHash = hash . encode $ (m ! "info")
- }
+ in Right Metainfo {
+ info = info'
+ , announceList = maybeToList (announce' >>= bstrToString)
+ ++ getAnnounceList announceList'
+ , creationDate = bValToInteger =<< creationDate'
+ , comment = bstrToString =<< comment'
+ , createdBy = bstrToString =<< createdBy'
+ , encoding = bstrToString =<< encoding'
+ , infoHash = hash . encode $ (m ! "info")
+ }
-mkMetaInfo _ = Nothing
+mkMetaInfo _ = Left "mkMetaInfo: expect an input dict"
getAnnounceList :: Maybe BVal -> [String]
getAnnounceList Nothing = []