persistent-2.18.0.0: Database/Persist/FieldDef.hs
-- |
--
-- @since 2.13.0.0
module Database.Persist.FieldDef
( -- * The 'FieldDef' type
FieldDef
-- ** Setters
, setFieldAttrs
, overFieldAttrs
, addFieldAttr
-- ** Helpers
, isFieldNullable
, isFieldMaybe
, isFieldNotGenerated
, isHaskellField
-- * 'FieldCascade'
, FieldCascade (..)
, renderFieldCascade
, renderCascadeAction
, noCascade
, CascadeAction (..)
) where
import Database.Persist.FieldDef.Internal
import Database.Persist.Types.Base
( FieldAttr (..)
, FieldType (..)
, IsNullable (..)
, fieldAttrsContainsNullable
, isHaskellField
)
-- | Replace the 'FieldDef' 'FieldAttr' with the new list.
--
-- @since 2.13.0.0
setFieldAttrs :: [FieldAttr] -> FieldDef -> FieldDef
setFieldAttrs fas fd = fd{fieldAttrs = fas}
-- | Modify the list of field attributes.
--
-- @since 2.13.0.0
overFieldAttrs :: ([FieldAttr] -> [FieldAttr]) -> FieldDef -> FieldDef
overFieldAttrs k fd = fd{fieldAttrs = k (fieldAttrs fd)}
-- | Add an attribute to the list of field attributes.
--
-- @since 2.13.0.0
addFieldAttr :: FieldAttr -> FieldDef -> FieldDef
addFieldAttr fa = overFieldAttrs (fa :)
-- | Check if the field definition is nullable
--
-- @since 2.13.0.0
isFieldNullable :: FieldDef -> IsNullable
isFieldNullable =
fieldAttrsContainsNullable . fieldAttrs
-- | Check if the field is `Maybe a`
--
-- @since 2.13.0.0
isFieldMaybe :: FieldDef -> Bool
isFieldMaybe field =
case fieldType field of
FTApp (FTTypeCon _ "Maybe") _ ->
True
_ ->
False