+{-# LANGUAGE
+ UnicodeSyntax
+ #-}
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)
-
+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 {
, stoIndexChan :: !(TChan IndexReq)
}
-
data IndexReq
= RebuildIndex
| SyncIndex
- | SearchIndex !Condition !(TMVar [(PageName, RevNum)])
+ | 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)