module Hunt.Common.Document
where
import Control.Applicative
import Control.DeepSeq
import Data.Aeson
import Data.Binary (Binary (..))
import Data.Text as T
import Data.Text.Binary ()
import Hunt.Common.ApiDocument
import Hunt.Common.BasicTypes
import qualified Hunt.Common.DocDesc as DD
import Hunt.Utility.Log
data Document = Document
{ uri :: ! URI
, desc :: ! Description
, wght :: ! Score
}
deriving (Show, Eq)
emptyDocument :: Document
emptyDocument = Document "" DD.empty defScore
toApiDocument :: Document -> ApiDocument
toApiDocument (Document u d w)
= ApiDocument u emptyApiDocIndexMap d (fromDefScore w)
fromApiDocument :: ApiDocument -> Document
fromApiDocument (ApiDocument u _ix d w)
= Document u d (toDefScore w)
instance ToJSON Document where
toJSON = toJSON . toApiDocument
instance FromJSON Document where
parseJSON o = fromApiDocument <$> parseJSON o
instance Binary Document where
put (Document u d w) = put u >> put d >> put w
get = Document <$> get <*> get <*> get
instance NFData Document where
rnf (Document t d _w) = rnf t `seq` rnf d
class (NFData e) => DocumentWrapper e where
unwrap :: e -> Document
wrap :: Document -> e
update :: (Document -> Document) -> e -> e
update f = wrap . f . unwrap
instance DocumentWrapper Document where
unwrap = id
wrap = id
instance LogShow Document where
logShow o = "Document {uri = \"" ++ (T.unpack . uri $ o) ++ "\", ..}"