packages feed

gbs-downloader-0.1.0.0: download-sdmf/Main.hs

{-# 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 "<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