bdcs-0.1.0: src/BDCS/KeyType.hs
{-# LANGUAGE TemplateHaskell #-}
-- |
-- Module: BDCS.ReqType
-- Copyright: (c) 2017 Red Hat, Inc.
-- License: LGPL
--
-- Maintainer: https://github.com/weldr
-- Stability: alpha
-- Portability: portable
--
-- Data types for working with the key in a 'BDCS.DB.KeyVal'.
module BDCS.KeyType(KeyType(..),
asText)
where
import Database.Persist.TH
import Data.Aeson(ToJSON, toJSON)
import qualified Data.Text as T
import qualified BDCS.Label.Types as Label
-- | The 'BDCS.DB.KeyVal' record features a namespaced key, allowing multiple types of keys
-- to exist and be managed in the same database. This type allows differentiation of the
-- multiple kinds of keys.
data KeyType = LabelKey Label.Label -- ^ A key allowing only pre-defined labels to be appplied.
| TextKey T.Text -- ^ Ordinary text key
deriving(Eq, Read, Show)
derivePersistField "KeyType"
instance ToJSON KeyType where
toJSON (TextKey t) = toJSON t
toJSON (LabelKey l) = toJSON l
-- | Convert a 'KeyType' into 'Data.Text.Text'
asText :: KeyType -> T.Text
asText (LabelKey l) = T.pack $ show l
asText (TextKey t) = t