opaleye-0.7.1.0: src/Opaleye/Experimental/Enum.hs
module Opaleye.Experimental.Enum
(
fromFieldToFieldsEnum
) where
import Opaleye.Column (Column)
import qualified Opaleye as O
import qualified Opaleye.Internal.RunQuery as RQ
import Data.ByteString.Char8 (unpack)
fromFieldToFieldsEnum :: String
-> (String -> Maybe haskellSum)
-> (haskellSum -> String)
-> (RQ.FromField sqlEnum haskellSum,
O.ToFields haskellSum (Column sqlEnum))
fromFieldToFieldsEnum type_ from to_ = (fromFieldEnum, toFieldsEnum)
where
toFieldsEnum = O.toToFields (O.unsafeCast type_ . O.sqlString . to_)
fromFieldEnum = flip fmap RQ.unsafeFromFieldRaw $ \(_, mdata) -> case mdata of
Nothing -> error "Unexpected NULL"
Just s -> case from (unpack s) of
Just r -> r
Nothing -> error ("Unexpected: " ++ unpack s)