{-# LANGUAGE FlexibleContexts #-} module Main where import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as C8 import qualified Data.ByteString.Lazy as BL import qualified Data.Text as T import Data.Yaml (decodeEither') import System.Environment (getArgs) import Tahoe.Announcement (Announcements (..)) import Tahoe.Download (announcementToMutableStorageServer, download) import Tahoe.SDMF (SDMF (..), pCapability, writerReader) import Text.Megaparsec (parse) main :: IO () main = do [announcementPath, readCap] <- getArgs -- Load server announcements announcementsBytes <- B.readFile announcementPath let Right (Announcements announcements) = decodeEither' announcementsBytes -- Accept & parse read capability case parse pCapability "" (T.pack readCap) of Left e -> print $ "Failed to parse cap: " <> show e Right (SDMFVerifier _) -> C8.putStrLn "Nothing currently implemented for verifier caps." Right (SDMFWriter rwcap) -> go announcements (writerReader rwcap) Right (SDMFReader rocap) -> go announcements rocap where go announcements cap = do -- Download & decode the shares result <- download announcements cap announcementToMutableStorageServer -- Show the result putStrLn "Your result:" either print (C8.putStrLn . BL.toStrict) result