{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveLift #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Proto3.Wire.Types
(
FieldNumber(..)
, fieldNumber
, WireType(..)
) where
import Control.DeepSeq ( NFData )
import Data.Data ( Data )
import Data.Hashable ( Hashable )
import Data.Word ( Word64 )
import GHC.Generics ( Generic )
import Language.Haskell.TH.Syntax ( Lift )
import Test.QuickCheck ( Arbitrary(..), choose )
newtype FieldNumber = FieldNumber
{ FieldNumber -> Word64
getFieldNumber :: Word64 }
deriving (FieldNumber
forall a. a -> a -> Bounded a
maxBound :: FieldNumber
$cmaxBound :: FieldNumber
minBound :: FieldNumber
$cminBound :: FieldNumber
Bounded, Typeable FieldNumber
FieldNumber -> DataType
FieldNumber -> Constr
(forall b. Data b => b -> b) -> FieldNumber -> FieldNumber
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 u. Int -> (forall d. Data d => d -> u) -> FieldNumber -> u
forall u. (forall d. Data d => d -> u) -> FieldNumber -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> FieldNumber -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> FieldNumber -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> FieldNumber -> m FieldNumber
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FieldNumber -> m FieldNumber
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c FieldNumber
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> FieldNumber -> c FieldNumber
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c FieldNumber)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c FieldNumber)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FieldNumber -> m FieldNumber
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FieldNumber -> m FieldNumber
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FieldNumber -> m FieldNumber
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> FieldNumber -> m FieldNumber
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> FieldNumber -> m FieldNumber
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> FieldNumber -> m FieldNumber
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> FieldNumber -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> FieldNumber -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> FieldNumber -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> FieldNumber -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> FieldNumber -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> FieldNumber -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> FieldNumber -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> FieldNumber -> r
gmapT :: (forall b. Data b => b -> b) -> FieldNumber -> FieldNumber
$cgmapT :: (forall b. Data b => b -> b) -> FieldNumber -> FieldNumber
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c FieldNumber)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c FieldNumber)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c FieldNumber)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c FieldNumber)
dataTypeOf :: FieldNumber -> DataType
$cdataTypeOf :: FieldNumber -> DataType
toConstr :: FieldNumber -> Constr
$ctoConstr :: FieldNumber -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c FieldNumber
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c FieldNumber
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> FieldNumber -> c FieldNumber
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> FieldNumber -> c FieldNumber
Data, Int -> FieldNumber
FieldNumber -> Int
FieldNumber -> [FieldNumber]
FieldNumber -> FieldNumber
FieldNumber -> FieldNumber -> [FieldNumber]
FieldNumber -> FieldNumber -> FieldNumber -> [FieldNumber]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: FieldNumber -> FieldNumber -> FieldNumber -> [FieldNumber]
$cenumFromThenTo :: FieldNumber -> FieldNumber -> FieldNumber -> [FieldNumber]
enumFromTo :: FieldNumber -> FieldNumber -> [FieldNumber]
$cenumFromTo :: FieldNumber -> FieldNumber -> [FieldNumber]
enumFromThen :: FieldNumber -> FieldNumber -> [FieldNumber]
$cenumFromThen :: FieldNumber -> FieldNumber -> [FieldNumber]
enumFrom :: FieldNumber -> [FieldNumber]
$cenumFrom :: FieldNumber -> [FieldNumber]
fromEnum :: FieldNumber -> Int
$cfromEnum :: FieldNumber -> Int
toEnum :: Int -> FieldNumber
$ctoEnum :: Int -> FieldNumber
pred :: FieldNumber -> FieldNumber
$cpred :: FieldNumber -> FieldNumber
succ :: FieldNumber -> FieldNumber
$csucc :: FieldNumber -> FieldNumber
Enum, FieldNumber -> FieldNumber -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FieldNumber -> FieldNumber -> Bool
$c/= :: FieldNumber -> FieldNumber -> Bool
== :: FieldNumber -> FieldNumber -> Bool
$c== :: FieldNumber -> FieldNumber -> Bool
Eq, forall x. Rep FieldNumber x -> FieldNumber
forall x. FieldNumber -> Rep FieldNumber x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep FieldNumber x -> FieldNumber
$cfrom :: forall x. FieldNumber -> Rep FieldNumber x
Generic, Eq FieldNumber
Int -> FieldNumber -> Int
FieldNumber -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
hash :: FieldNumber -> Int
$chash :: FieldNumber -> Int
hashWithSalt :: Int -> FieldNumber -> Int
$chashWithSalt :: Int -> FieldNumber -> Int
Hashable, forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => FieldNumber -> m Exp
forall (m :: * -> *). Quote m => FieldNumber -> Code m FieldNumber
liftTyped :: forall (m :: * -> *). Quote m => FieldNumber -> Code m FieldNumber
$cliftTyped :: forall (m :: * -> *). Quote m => FieldNumber -> Code m FieldNumber
lift :: forall (m :: * -> *). Quote m => FieldNumber -> m Exp
$clift :: forall (m :: * -> *). Quote m => FieldNumber -> m Exp
Lift, FieldNumber -> ()
forall a. (a -> ()) -> NFData a
rnf :: FieldNumber -> ()
$crnf :: FieldNumber -> ()
NFData, Integer -> FieldNumber
FieldNumber -> FieldNumber
FieldNumber -> FieldNumber -> FieldNumber
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> FieldNumber
$cfromInteger :: Integer -> FieldNumber
signum :: FieldNumber -> FieldNumber
$csignum :: FieldNumber -> FieldNumber
abs :: FieldNumber -> FieldNumber
$cabs :: FieldNumber -> FieldNumber
negate :: FieldNumber -> FieldNumber
$cnegate :: FieldNumber -> FieldNumber
* :: FieldNumber -> FieldNumber -> FieldNumber
$c* :: FieldNumber -> FieldNumber -> FieldNumber
- :: FieldNumber -> FieldNumber -> FieldNumber
$c- :: FieldNumber -> FieldNumber -> FieldNumber
+ :: FieldNumber -> FieldNumber -> FieldNumber
$c+ :: FieldNumber -> FieldNumber -> FieldNumber
Num, Eq FieldNumber
FieldNumber -> FieldNumber -> Bool
FieldNumber -> FieldNumber -> Ordering
FieldNumber -> FieldNumber -> FieldNumber
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
min :: FieldNumber -> FieldNumber -> FieldNumber
$cmin :: FieldNumber -> FieldNumber -> FieldNumber
max :: FieldNumber -> FieldNumber -> FieldNumber
$cmax :: FieldNumber -> FieldNumber -> FieldNumber
>= :: FieldNumber -> FieldNumber -> Bool
$c>= :: FieldNumber -> FieldNumber -> Bool
> :: FieldNumber -> FieldNumber -> Bool
$c> :: FieldNumber -> FieldNumber -> Bool
<= :: FieldNumber -> FieldNumber -> Bool
$c<= :: FieldNumber -> FieldNumber -> Bool
< :: FieldNumber -> FieldNumber -> Bool
$c< :: FieldNumber -> FieldNumber -> Bool
compare :: FieldNumber -> FieldNumber -> Ordering
$ccompare :: FieldNumber -> FieldNumber -> Ordering
Ord)
instance Show FieldNumber where
show :: FieldNumber -> String
show (FieldNumber Word64
n) = forall a. Show a => a -> String
show Word64
n
instance Arbitrary FieldNumber where
arbitrary :: Gen FieldNumber
arbitrary = Word64 -> FieldNumber
FieldNumber forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Random a => (a, a) -> Gen a
choose (Word64
1, Word64
536870911)
fieldNumber :: Word64 -> FieldNumber
fieldNumber :: Word64 -> FieldNumber
fieldNumber = Word64 -> FieldNumber
FieldNumber
data WireType
= Varint
| Fixed32
| Fixed64
| LengthDelimited
deriving (WireType
forall a. a -> a -> Bounded a
maxBound :: WireType
$cmaxBound :: WireType
minBound :: WireType
$cminBound :: WireType
Bounded, Typeable WireType
WireType -> DataType
WireType -> Constr
(forall b. Data b => b -> b) -> WireType -> WireType
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 u. Int -> (forall d. Data d => d -> u) -> WireType -> u
forall u. (forall d. Data d => d -> u) -> WireType -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> WireType -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> WireType -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> WireType -> m WireType
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> WireType -> m WireType
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c WireType
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> WireType -> c WireType
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c WireType)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c WireType)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> WireType -> m WireType
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> WireType -> m WireType
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> WireType -> m WireType
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> WireType -> m WireType
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> WireType -> m WireType
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> WireType -> m WireType
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> WireType -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> WireType -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> WireType -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> WireType -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> WireType -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> WireType -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> WireType -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> WireType -> r
gmapT :: (forall b. Data b => b -> b) -> WireType -> WireType
$cgmapT :: (forall b. Data b => b -> b) -> WireType -> WireType
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c WireType)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c WireType)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c WireType)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c WireType)
dataTypeOf :: WireType -> DataType
$cdataTypeOf :: WireType -> DataType
toConstr :: WireType -> Constr
$ctoConstr :: WireType -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c WireType
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c WireType
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> WireType -> c WireType
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> WireType -> c WireType
Data, Int -> WireType
WireType -> Int
WireType -> [WireType]
WireType -> WireType
WireType -> WireType -> [WireType]
WireType -> WireType -> WireType -> [WireType]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: WireType -> WireType -> WireType -> [WireType]
$cenumFromThenTo :: WireType -> WireType -> WireType -> [WireType]
enumFromTo :: WireType -> WireType -> [WireType]
$cenumFromTo :: WireType -> WireType -> [WireType]
enumFromThen :: WireType -> WireType -> [WireType]
$cenumFromThen :: WireType -> WireType -> [WireType]
enumFrom :: WireType -> [WireType]
$cenumFrom :: WireType -> [WireType]
fromEnum :: WireType -> Int
$cfromEnum :: WireType -> Int
toEnum :: Int -> WireType
$ctoEnum :: Int -> WireType
pred :: WireType -> WireType
$cpred :: WireType -> WireType
succ :: WireType -> WireType
$csucc :: WireType -> WireType
Enum, WireType -> WireType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: WireType -> WireType -> Bool
$c/= :: WireType -> WireType -> Bool
== :: WireType -> WireType -> Bool
$c== :: WireType -> WireType -> Bool
Eq, forall x. Rep WireType x -> WireType
forall x. WireType -> Rep WireType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep WireType x -> WireType
$cfrom :: forall x. WireType -> Rep WireType x
Generic, forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => WireType -> m Exp
forall (m :: * -> *). Quote m => WireType -> Code m WireType
liftTyped :: forall (m :: * -> *). Quote m => WireType -> Code m WireType
$cliftTyped :: forall (m :: * -> *). Quote m => WireType -> Code m WireType
lift :: forall (m :: * -> *). Quote m => WireType -> m Exp
$clift :: forall (m :: * -> *). Quote m => WireType -> m Exp
Lift, Eq WireType
WireType -> WireType -> Bool
WireType -> WireType -> Ordering
WireType -> WireType -> WireType
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
min :: WireType -> WireType -> WireType
$cmin :: WireType -> WireType -> WireType
max :: WireType -> WireType -> WireType
$cmax :: WireType -> WireType -> WireType
>= :: WireType -> WireType -> Bool
$c>= :: WireType -> WireType -> Bool
> :: WireType -> WireType -> Bool
$c> :: WireType -> WireType -> Bool
<= :: WireType -> WireType -> Bool
$c<= :: WireType -> WireType -> Bool
< :: WireType -> WireType -> Bool
$c< :: WireType -> WireType -> Bool
compare :: WireType -> WireType -> Ordering
$ccompare :: WireType -> WireType -> Ordering
Ord, Int -> WireType -> ShowS
[WireType] -> ShowS
WireType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [WireType] -> ShowS
$cshowList :: [WireType] -> ShowS
show :: WireType -> String
$cshow :: WireType -> String
showsPrec :: Int -> WireType -> ShowS
$cshowsPrec :: Int -> WireType -> ShowS
Show)