packages feed

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