module Database.YamSql.Internal.Obj.Domain where

import Database.YamSql.Internal.Basic
import Database.YamSql.Internal.Obj.Check

-- | Domains are aliases of an existing SQL types, possibly with checks
data Domain =
  Domain
    { domainName :: SqlName
    , domainDescription :: Text
    , _domainType :: SqlType
    , domainDefault :: Maybe Text
    , domainChecks :: Maybe [Check]
    }
  deriving (Generic, Show, Data)

instance FromJSON Domain where
  parseJSON = parseYamSql

instance ToJSON Domain where
  toJSON = toYamSqlJson

data SQL_DOMAIN =
  SQL_DOMAIN
  deriving (SqlObjType, Show)

instance ToSqlCode SQL_DOMAIN where
  toSqlCode = const "DOMAIN"

data SQL_DOMAIN_CONSTRAINT =
  SQL_DOMAIN_CONSTRAINT
  deriving (SqlObjType, Show)

instance ToSqlCode SQL_DOMAIN_CONSTRAINT where
  toSqlCode = const "DOMAIN_CONSTRAINT"

makeLenses ''Domain
