module Rakka.Storage.Types ( Storage(..) , IndexReq(..) , SearchResult(..) , HitPage(..) , SnippetFragment(..) ) where import Control.Concurrent.STM 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 , hpSnippet :: [SnippetFragment] } deriving (Show, Eq) data SnippetFragment = Boundary | NormalText !String | HighlightedWord !String deriving (Show, Eq)