module GitHub.Data.Id (
    Id(..),
    mkId,
    untagId,
    ) where

import GitHub.Internal.Prelude
import Prelude ()

-- | Numeric identifier.
newtype Id entity = Id Int
    deriving (Id entity -> Id entity -> Bool
forall entity. Id entity -> Id entity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Id entity -> Id entity -> Bool
$c/= :: forall entity. Id entity -> Id entity -> Bool
== :: Id entity -> Id entity -> Bool
$c== :: forall entity. Id entity -> Id entity -> Bool
Eq, Id entity -> Id entity -> Bool
Id entity -> Id entity -> Ordering
Id entity -> Id entity -> Id entity
forall entity. Eq (Id entity)
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall entity. Id entity -> Id entity -> Bool
forall entity. Id entity -> Id entity -> Ordering
forall entity. Id entity -> Id entity -> Id entity
min :: Id entity -> Id entity -> Id entity
$cmin :: forall entity. Id entity -> Id entity -> Id entity
max :: Id entity -> Id entity -> Id entity
$cmax :: forall entity. Id entity -> Id entity -> Id entity
>= :: Id entity -> Id entity -> Bool
$c>= :: forall entity. Id entity -> Id entity -> Bool
> :: Id entity -> Id entity -> Bool
$c> :: forall entity. Id entity -> Id entity -> Bool
<= :: Id entity -> Id entity -> Bool
$c<= :: forall entity. Id entity -> Id entity -> Bool
< :: Id entity -> Id entity -> Bool
$c< :: forall entity. Id entity -> Id entity -> Bool
compare :: Id entity -> Id entity -> Ordering
$ccompare :: forall entity. Id entity -> Id entity -> Ordering
Ord, Int -> Id entity -> ShowS
forall entity. Int -> Id entity -> ShowS
forall entity. [Id entity] -> ShowS
forall entity. Id entity -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Id entity] -> ShowS
$cshowList :: forall entity. [Id entity] -> ShowS
show :: Id entity -> String
$cshow :: forall entity. Id entity -> String
showsPrec :: Int -> Id entity -> ShowS
$cshowsPrec :: forall entity. Int -> Id entity -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall entity x. Rep (Id entity) x -> Id entity
forall entity x. Id entity -> Rep (Id entity) x
$cto :: forall entity x. Rep (Id entity) x -> Id entity
$cfrom :: forall entity x. Id entity -> Rep (Id entity) x
Generic, Typeable, Id entity -> DataType
Id entity -> Constr
forall {entity}. Data entity => Typeable (Id entity)
forall entity. Data entity => Id entity -> DataType
forall entity. Data entity => Id entity -> Constr
forall entity.
Data entity =>
(forall b. Data b => b -> b) -> Id entity -> Id entity
forall entity u.
Data entity =>
Int -> (forall d. Data d => d -> u) -> Id entity -> u
forall entity u.
Data entity =>
(forall d. Data d => d -> u) -> Id entity -> [u]
forall entity r r'.
Data entity =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Id entity -> r
forall entity r r'.
Data entity =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Id entity -> r
forall entity (m :: * -> *).
(Data entity, Monad m) =>
(forall d. Data d => d -> m d) -> Id entity -> m (Id entity)
forall entity (m :: * -> *).
(Data entity, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Id entity -> m (Id entity)
forall entity (c :: * -> *).
Data entity =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Id entity)
forall entity (c :: * -> *).
Data entity =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Id entity -> c (Id entity)
forall entity (t :: * -> *) (c :: * -> *).
(Data entity, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Id entity))
forall entity (t :: * -> * -> *) (c :: * -> *).
(Data entity, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Id entity))
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Id entity)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Id entity -> c (Id entity)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Id entity))
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Id entity -> m (Id entity)
$cgmapMo :: forall entity (m :: * -> *).
(Data entity, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Id entity -> m (Id entity)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Id entity -> m (Id entity)
$cgmapMp :: forall entity (m :: * -> *).
(Data entity, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Id entity -> m (Id entity)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Id entity -> m (Id entity)
$cgmapM :: forall entity (m :: * -> *).
(Data entity, Monad m) =>
(forall d. Data d => d -> m d) -> Id entity -> m (Id entity)
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Id entity -> u
$cgmapQi :: forall entity u.
Data entity =>
Int -> (forall d. Data d => d -> u) -> Id entity -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Id entity -> [u]
$cgmapQ :: forall entity u.
Data entity =>
(forall d. Data d => d -> u) -> Id entity -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Id entity -> r
$cgmapQr :: forall entity r r'.
Data entity =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Id entity -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Id entity -> r
$cgmapQl :: forall entity r r'.
Data entity =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Id entity -> r
gmapT :: (forall b. Data b => b -> b) -> Id entity -> Id entity
$cgmapT :: forall entity.
Data entity =>
(forall b. Data b => b -> b) -> Id entity -> Id entity
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Id entity))
$cdataCast2 :: forall entity (t :: * -> * -> *) (c :: * -> *).
(Data entity, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Id entity))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Id entity))
$cdataCast1 :: forall entity (t :: * -> *) (c :: * -> *).
(Data entity, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Id entity))
dataTypeOf :: Id entity -> DataType
$cdataTypeOf :: forall entity. Data entity => Id entity -> DataType
toConstr :: Id entity -> Constr
$ctoConstr :: forall entity. Data entity => Id entity -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Id entity)
$cgunfold :: forall entity (c :: * -> *).
Data entity =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Id entity)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Id entity -> c (Id entity)
$cgfoldl :: forall entity (c :: * -> *).
Data entity =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Id entity -> c (Id entity)
Data)

-- | Smart constructor for 'Id'.
mkId :: proxy entity -> Int -> Id entity
mkId :: forall (proxy :: * -> *) entity. proxy entity -> Int -> Id entity
mkId proxy entity
_ = forall entity. Int -> Id entity
Id

untagId :: Id entity -> Int
untagId :: forall entity. Id entity -> Int
untagId (Id Int
name) = Int
name

instance Hashable (Id entity)
instance Binary (Id entity)

instance NFData (Id entity) where
    rnf :: Id entity -> ()
rnf (Id Int
s) = forall a. NFData a => a -> ()
rnf Int
s

instance FromJSON (Id entity) where
    parseJSON :: Value -> Parser (Id entity)
parseJSON = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall entity. Int -> Id entity
Id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. FromJSON a => Value -> Parser a
parseJSON

instance ToJSON (Id entity) where
    toJSON :: Id entity -> Value
toJSON = forall a. ToJSON a => a -> Value
toJSON forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall entity. Id entity -> Int
untagId