1 {-# LANGUAGE TemplateHaskell, OverloadedStrings, TypeFamilies #-}
    2 module Model.Format.Types
    3   ( Format(..)
    4   , unknownFormat
    5   ) where
    6 
    7 import qualified Data.ByteString as BS
    8 import Data.Function (on)
    9 import Data.Int (Int16)
   10 import qualified Data.Text as T
   11 import Instances.TH.Lift ()
   12 import Language.Haskell.TH.Lift (deriveLift)
   13 
   14 -- import Model.Kind
   15 import Model.Id.Types
   16 
   17 type instance IdType Format = Int16
   18 
   19 data Format = Format
   20   { formatId :: Id Format
   21   , formatMimeType :: BS.ByteString
   22   , formatExtension :: [BS.ByteString] -- TODO: nonempty list
   23   , formatName :: T.Text
   24   }
   25 
   26 -- instance Kinded Format where
   27 --  kindOf _ = "format"
   28 
   29 instance Eq Format where
   30   (==) = on (==) formatId
   31 
   32 deriveLift ''Format
   33 
   34 unknownFormat :: Format
   35 unknownFormat = Format
   36   { formatId = error "unknownFormat"
   37   , formatMimeType = "application/octet-stream"
   38   , formatExtension = []
   39   , formatName = "Unknown"
   40   }
   41