{-# LANGUAGE GeneralizedNewtypeDeriving, DeriveDataTypeable,
  OverloadedStrings #-}
module Data.Bond.Schema.Modifier where
import qualified Data.Bond.Internal.Imports as B'
import qualified Prelude as P'

newtype Modifier = Modifier B'.Int32
                 deriving (P'.Show, P'.Eq, B'.NFData, P'.Ord, P'.Enum, B'.Hashable,
                           B'.Default, B'.Typeable)

instance B'.BondType Modifier where
        bondPut (Modifier v') = B'.bondPut v'
        bondGet = P'.fmap Modifier B'.bondGet
        getName _ = "Modifier"
        getQualifiedName _ = "bond.Modifier"
        getElementType _ = B'.ElementInt32

instance B'.BondEnum Modifier where
        toName (Modifier 0) = P'.Just "Optional"
        toName (Modifier 1) = P'.Just "Required"
        toName (Modifier 2) = P'.Just "RequiredOptional"
        toName _ = P'.Nothing
        fromName "Optional" = P'.Just optional
        fromName "Required" = P'.Just required
        fromName "RequiredOptional" = P'.Just requiredOptional
        fromName _ = P'.Nothing

optional, required, requiredOptional :: Modifier
optional = Modifier 0
required = Modifier 1
requiredOptional = Modifier 2