servant-github-0.1.0.0: src/Network/GitHub/Types.hs
{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module : Network.GitHub.Types
-- Copyright : (c) Finlay Thompson, 2015
-- License : BSD3
-- Maintainer : finlay.thompson@gmail.com
-- Stability : experimental
--
-- Most of the types only parse part of the data availble in the return
-- values from the GitHub API. These will be added to as required.
module Network.GitHub.Types
( Organisation(..)
, OrgLogin
, Team(..)
, TeamId
, Member(..)
, MemberId
, Repository(..)
, RepositoryName
)
where
import Control.Monad
import Data.Aeson
import Data.Text
-- | Organisation
data Organisation = Organisation
{ orgLogin :: OrgLogin
, orgId :: Int
, orgDescription :: Maybe Text
} deriving (Eq, Show)
-- | Primary identifier for an organisation is the login
type OrgLogin = Text
instance FromJSON Organisation where
parseJSON (Object o) =
Organisation <$> o .: "login"
<*> o .: "id"
<*> o .: "description"
parseJSON _ = mzero
-- | Team
data Team = Team
{ teamId :: TeamId
, teamName :: Text
, teamDescription :: Maybe Text
, teamPermission :: Maybe Text
} deriving (Eq, Show)
-- | Identifier for a team id
type TeamId = Integer
instance FromJSON Team where
parseJSON (Object o) =
Team <$> o .: "id"
<*> o .: "name"
<*> o .: "description"
<*> o .: "permission"
parseJSON _ = mzero
-- | Member
data Member = Member
{ memberId :: MemberId
, memberLogin :: Text
} deriving (Eq, Show)
-- | members are identified by ids
type MemberId = Integer
instance FromJSON Member where
parseJSON (Object o) =
Member <$> o .: "id"
<*> o .: "login"
parseJSON _ = mzero
-- | Repository
data Repository = Repository
{ repositoryName :: RepositoryName
, repositoryDescription :: Maybe Text
, repositoryPrivate :: Bool
} deriving (Eq, Show)
-- | repositories are identified by their name
type RepositoryName = Text
instance FromJSON Repository where
parseJSON (Object o) =
Repository <$> o .: "name"
<*> o .: "description"
<*> o .: "private"
parseJSON _ = mzero