1 {-# LANGUAGE TemplateHaskell, OverloadedStrings, TypeFamilies #-}
    2 module Databrary.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 Data.Ord (comparing)
   11 import qualified Data.Text as T
   12 import Instances.TH.Lift ()
   13 import Language.Haskell.TH.Lift (deriveLift)
   14 
   15 import Databrary.Model.Kind
   16 import Databrary.Model.Id.Types
   17 
   18 type instance IdType Format = Int16
   19 
   20 data Format = Format
   21   { formatId :: Id Format
   22   , formatMimeType :: BS.ByteString
   23   , formatExtension :: [BS.ByteString] -- TODO: nonempty list
   24   , formatName :: T.Text
   25   }
   26   -- deriving (Show)
   27 
   28 instance Kinded Format where
   29   kindOf _ = "format"
   30 
   31 instance Eq Format where
   32   (==) = on (==) formatId
   33   (/=) = on (/=) formatId
   34 
   35 instance Ord Format where
   36   compare = comparing formatId
   37 
   38 deriveLift ''Format
   39 
   40 unknownFormat :: Format
   41 unknownFormat = Format
   42   { formatId = error "unknownFormat"
   43   , formatMimeType = "application/octet-stream"
   44   , formatExtension = []
   45   , formatName = "Unknown"
   46   }
   47 
   48 ERROR: ("",8,Loc 48 1,[(Loc 51 3,IsTicked),(Loc 51 3,TopLevelDecl False 1)],[(Loc 48 22,Loc 48 47,NotTicked),(Loc 49 23,Loc 49 24,NotTicked),(Loc 50 18,Loc 50 26,NotTicked)])