module Anki.Model (
ModelId
, Model(..)
, ModelField(..)
, ModelTemplate(..)
) where
import Anki.Common (WeaklyTypedInt, ModificationTime, AnkiException(..))
import Anki.Common (dropPrefixOptions, getJsonValue, fromDictionary, mkEntry)
import Data.Aeson (Value(..), FromJSON(..), genericParseJSON)
import Database.SQLite.Simple.FromField (FromField(..))
import GHC.Generics (Generic)
type ModelId = WeaklyTypedInt
data Model = Model {
modelId :: ModelId
, modelCss :: Value
, modelDid :: Value
, modelFlds :: [ModelField]
, modelLatexPre :: Value
, modelLatexPost :: Value
, modelMod :: ModificationTime
, modelName :: Value
, modelSortf :: Value
, modelTags :: Value
, modelTmpls :: [ModelTemplate]
, modelType :: Value
, modelUsn :: Value
, modelVers :: Value
} deriving (Show, Eq, Generic)
instance FromJSON Model where
parseJSON = genericParseJSON dropPrefixOptions
instance FromField [Model] where
fromField f = getJsonValue f >>= fromDictionary (mkEntry modelId ModelIdInconsistent) f where
data ModelField = ModelField {
mfName :: String
, mfMedia :: Value
, mfSticky :: Value
, mfRtl :: Value
, mfOrd :: Value
, mfFont :: Value
, mfSize :: Value
} deriving (Show, Eq, Generic)
instance FromJSON ModelField where
parseJSON = genericParseJSON dropPrefixOptions
data ModelTemplate = ModelTemplate {
mtName :: String
, mtQfmt :: Value
, mtDid :: Value
, mtBafmt :: Value
, mtAfmt :: Value
, mtBqfmt :: Value
, mtOrd :: Value
} deriving (Show, Eq, Generic)
instance FromJSON ModelTemplate where
parseJSON = genericParseJSON dropPrefixOptions