module Controller.Menu.File.Import.CsvParameters (Parameters(..),defaultParams) where import Util.Sexp (Sexp(..)) import Util.Sexpable (Sexpable(..),PSE,recordToSexp,recordFromSexp) data Parameters = Parameters { columnDelimiter :: Char , rowDelimiter :: Char , firstColumnContainsLabels :: Bool , firstRowContainsLabels :: Bool , stripWhitespace :: Bool } defaultParams :: Parameters defaultParams = Parameters ' ' '\n' True True True instance Sexpable Parameters where toSexp = recordToSexp [ ("columnDelimiter", toSexp . columnDelimiter) , ("rowDelimiter", toSexp . rowDelimiter) , ("firstColumnContainsLabels", toSexp . firstColumnContainsLabels) , ("firstRowContainsLabels", toSexp . firstRowContainsLabels) , ("stripWhitespace", toSexp . stripWhitespace) ] 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} _ -> return p