hunt-server-cli-0.2.0.0: src/Hunt/Converter/CSV.hs
module Hunt.Converter.CSV where
import Prelude hiding ( mapM_, map, putStrLn)
import Control.Applicative ((<$>))
import Data.Aeson.Encode.Pretty (encodePretty)
import Data.Aeson (Value(..))
import Data.ByteString.Lazy.Char8 (putStrLn)
import Data.Conduit (Conduit, ($=), ($$))
import Data.Conduit.Binary hiding ( mapM_)
import Data.Conduit.List (consume)
import Data.CSV.Conduit (defCSVSettings, intoCSV, MapRow, runResourceT)
import qualified Data.Map
import Data.String.Conversions (cs)
import Data.Text (Text)
import qualified Hunt.Common.DocDesc (DocDesc, fromList)
import qualified Hunt.ClientInterface as H
import qualified Hunt.Conduit as HC
convertToDocument :: FilePath -> Int -> MapRow Text -> H.ApiDocument
convertToDocument fileName i row = H.listToApiDoc uri elems elems
where
uri = (cs $ "file://" ++ fileName ++ "/" ++ (show i))
elems = (Data.Map.toList row)
rowToApiDocument :: (Monad m) => FilePath -> Conduit (MapRow Text) m H.Command
rowToApiDocument fileName = HC.makeInsertsWithIndex (convertToDocument fileName)
convert :: FilePath -> IO ()
convert fileName = do
list <- runResourceT $
sourceFile fileName $=
intoCSV defCSVSettings $=
rowToApiDocument fileName $$
consume
putStrLn $ encodePretty list