Skip to content
Snippets Groups Projects
Main.hs 1.31 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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 "<argv>" (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