module Pipes.KeyValueCsv.Types.KeyValue where
import Pipes.KeyValueCsv.Cell
import Pipes.KeyValueCsv.Common
import Pipes.KeyValueCsv.Names
import Pipes.KeyValueCsv.Types.Common
import Control.Lens hiding (Const)
import Data.Default.Class
import Data.Typeable
import Data.Vinyl
import Data.Vinyl.Functor
import Data.Vinyl.TypeLevel
import Data.Validation
data KeyValueError
= MissingValue
| MultipleValues
| ValueParsingError String
deriving (Show, Eq)
type WithKeyValueError = Validation [KeyValueError]
data KeyValueOptions (m :: * -> *) (f :: k -> *) (rs :: [k]) = KeyValueOptions
{ _kvParser :: Rec (CellParser m f) rs
, _keyNames :: Rec (Const Text) rs
}
makeLenses ''KeyValueOptions
instance ( RecAll f rs FromCell
, FieldAll rs Typeable
, Record rs
, Monad m
) => Default (KeyValueOptions m f rs) where
def = KeyValueOptions
{ _kvParser = defaultParser
, _keyNames = names
}