{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
module Github.Data.Search where

import Github.Data.Issues (Issue)
import Github.Data.Repos  (Repo)

import Control.DeepSeq          (NFData (..))
import Control.DeepSeq.Generics (genericRnf)
import Data.Data                (Data, Typeable)
import Data.Text                (Text)
import Data.Vector              (Vector)
import GHC.Generics             (Generic)

data SearchReposResult = SearchReposResult {
   searchReposTotalCount :: !Int
  ,searchReposRepos      :: !(Vector Repo)
} deriving (Show, Data, Typeable, Eq, Ord, Generic)

instance NFData SearchReposResult where rnf = genericRnf

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

data SearchCodeResult = SearchCodeResult {
   searchCodeTotalCount :: !Int
  ,searchCodeCodes      :: !(Vector Code)
} deriving (Show, Data, Typeable, Eq, Ord, Generic)

instance NFData SearchCodeResult where rnf = genericRnf

data SearchIssuesResult = SearchIssuesResult {
   searchIssuesTotalCount :: !Int
  ,searchIssuesIssues     :: !(Vector Issue)
} deriving (Show, Data, Typeable, Eq, Ord, Generic)

instance NFData SearchIssuesResult where rnf = genericRnf