packages feed

lhae-0.0.2: src/Controller/Menu/File/Import/CsvParameters.hs

module Controller.Menu.File.Import.CsvParameters
    (Parameters(..),defaultParams)
        where

import Util.Sexp (Sexp(..))
import Util.Sexpable (Sexpable(..),PSE,unexpected,recordToSexp
                     ,recordFromSexp)

data Parameters = Parameters { columnDelimiter :: Char
                             , rowDelimiter :: Char
                             , firstColumnContainsLabels :: Bool
                             , firstRowContainsLabels :: Bool
                             , stripWhitespace :: Bool
                             , tryParsingNumbers :: Bool
                             }

defaultParams :: Parameters
defaultParams = Parameters ' ' '\n' True True True True

instance Sexpable Parameters where
    toSexp = recordToSexp
             [ ("columnDelimiter", toSexp . columnDelimiter)
             , ("rowDelimiter", toSexp . rowDelimiter)
             , ("firstColumnContainsLabels", toSexp . firstColumnContainsLabels)
             , ("firstRowContainsLabels", toSexp . firstRowContainsLabels)
             , ("stripWhitespace", toSexp . stripWhitespace)
             , ("tryParsingNumbers", toSexp . tryParsingNumbers)
             ]
    fromSexp = recordFromSexp setParam defaultParams

setParam :: Parameters -> Sexp -> PSE Parameters
setParam p sexp =
    case sexp of
      List [Atom "columnDelimiter",cD] -> do
                parameter <- fromSexp cD
                return $ p {columnDelimiter = parameter}
      List [Atom "rowDelimiter",rD] -> do
                parameter <- fromSexp rD
                return $ p {rowDelimiter = parameter}
      List [Atom "firstColumnContainsLabels",containsLabels] -> do
                parameter <- fromSexp containsLabels
                return $ p {firstColumnContainsLabels = parameter}
      List [Atom "firstRowContainsLabels",containsLabels] -> do
                parameter <- fromSexp containsLabels
                return $ p {firstRowContainsLabels = parameter}
      List [Atom "stripWhitespace",strip] -> do
                parameter <- fromSexp strip
                return $ p {stripWhitespace = parameter}
      List [Atom "tryParsingNumbers",try] -> do
                parameter <- fromSexp try
                return $ p {tryParsingNumbers = parameter}
      _ -> unexpected sexp