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