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.CHK.Capability (CHK (CHKReader), pCapability) import Tahoe.Download (announcementToImmutableStorageServer, download) 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 let Right (CHKReader cap) = parse pCapability "" (T.pack readCap) -- Download & decode the shares result <- download announcements cap announcementToImmutableStorageServer -- Show the result putStrLn "Your result:" either print (C8.putStrLn . BL.toStrict) result