module GitHub.Data.Search where
import Prelude ()
import Prelude.Compat
import GitHub.Data.Repos (Repo)
import Control.DeepSeq (NFData (..))
import Control.DeepSeq.Generics (genericRnf)
import Data.Aeson.Compat (FromJSON (..), withObject, (.!=), (.:), (.:?))
import Data.Binary (Binary)
import Data.Data (Data, Typeable)
import Data.Text (Text)
import Data.Vector (Vector)
import GHC.Generics (Generic)
import qualified Data.Vector as V
data SearchResult entity = SearchResult {
searchResultTotalCount :: !Int
,searchResultResults :: !(Vector entity)
} deriving (Show, Data, Typeable, Eq, Ord, Generic)
instance NFData entity => NFData (SearchResult entity) where rnf = genericRnf
instance Binary entity => Binary (SearchResult entity)
instance FromJSON entity => FromJSON (SearchResult entity) where
parseJSON = withObject "SearchResult" $ \o ->
SearchResult <$> o .: "total_count"
<*> o .:? "items" .!= V.empty
data Code = Code {
codeName :: !Text
,codePath :: !Text
,codeSha :: !Text
,codeUrl :: !Text
,codeGitUrl :: !Text
,codeHtmlUrl :: !Text
,codeRepo :: !Repo
} deriving (Show, Data, Typeable, Eq, Ord, Generic)
instance NFData Code where rnf = genericRnf
instance Binary Code
instance FromJSON Code where
parseJSON = withObject "Code" $ \o ->
Code <$> o .: "name"
<*> o .: "path"
<*> o .: "sha"
<*> o .: "url"
<*> o .: "git_url"
<*> o .: "html_url"
<*> o .: "repository"