{-# LANGUAGE UnicodeSyntax #-} module Rakka.Storage.Types ( Storage(..) , IndexReq(..) , SearchResult(..) , HitPage(..) , SnippetFragment(..) ) where import Control.Concurrent.STM import Data.Text (Text) import Data.Time import Rakka.Page import Subversion.Repository import Subversion.Types import Text.HyperEstraier hiding (WriteLock) data Storage = Storage { stoRepository :: !Repository , stoIndexChan :: !(TChan IndexReq) } data IndexReq = RebuildIndex | SyncIndex | SearchIndex !Condition !(TMVar SearchResult) data SearchResult = SearchResult { srTotal :: !Int , srPages :: ![HitPage] } deriving (Show, Eq) data HitPage = HitPage { hpPageName :: !PageName , hpPageRev :: RevNum , hpLastMod :: UTCTime , hpSummary :: Maybe Text , hpSnippet :: [SnippetFragment] } deriving (Show, Eq) data SnippetFragment = Boundary | NormalText !Text | HighlightedWord !Text deriving (Show, Eq)