{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Proto3.Wire.Types
(
FieldNumber(..)
, fieldNumber
, WireType(..)
) where
import Control.DeepSeq ( NFData )
import Data.Hashable ( Hashable )
import Data.Word ( Word64 )
import Test.QuickCheck ( Arbitrary(..), choose )
newtype FieldNumber = FieldNumber { FieldNumber -> Word64
getFieldNumber :: Word64 }
deriving (FieldNumber -> FieldNumber -> Bool
(FieldNumber -> FieldNumber -> Bool)
-> (FieldNumber -> FieldNumber -> Bool) -> Eq FieldNumber
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, Eq FieldNumber
Eq FieldNumber
-> (FieldNumber -> FieldNumber -> Ordering)
-> (FieldNumber -> FieldNumber -> Bool)
-> (FieldNumber -> FieldNumber -> Bool)
-> (FieldNumber -> FieldNumber -> Bool)
-> (FieldNumber -> FieldNumber -> Bool)
-> (FieldNumber -> FieldNumber -> FieldNumber)
-> (FieldNumber -> FieldNumber -> FieldNumber)
-> Ord 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
$cp1Ord :: Eq FieldNumber
Ord, Int -> FieldNumber
FieldNumber -> Int
FieldNumber -> [FieldNumber]
FieldNumber -> FieldNumber
FieldNumber -> FieldNumber -> [FieldNumber]
FieldNumber -> FieldNumber -> FieldNumber -> [FieldNumber]
(FieldNumber -> FieldNumber)
-> (FieldNumber -> FieldNumber)
-> (Int -> FieldNumber)
-> (FieldNumber -> Int)
-> (FieldNumber -> [FieldNumber])
-> (FieldNumber -> FieldNumber -> [FieldNumber])
-> (FieldNumber -> FieldNumber -> [FieldNumber])
-> (FieldNumber -> FieldNumber -> FieldNumber -> [FieldNumber])
-> Enum 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, Int -> FieldNumber -> Int
FieldNumber -> Int
(Int -> FieldNumber -> Int)
-> (FieldNumber -> Int) -> Hashable FieldNumber
forall a. (Int -> a -> Int) -> (a -> Int) -> Hashable a
hash :: FieldNumber -> Int
$chash :: FieldNumber -> Int
hashWithSalt :: Int -> FieldNumber -> Int
$chashWithSalt :: Int -> FieldNumber -> Int
Hashable, FieldNumber -> ()
(FieldNumber -> ()) -> NFData FieldNumber
forall a. (a -> ()) -> NFData a
rnf :: FieldNumber -> ()
$crnf :: FieldNumber -> ()
NFData, Integer -> FieldNumber
FieldNumber -> FieldNumber
FieldNumber -> FieldNumber -> FieldNumber
(FieldNumber -> FieldNumber -> FieldNumber)
-> (FieldNumber -> FieldNumber -> FieldNumber)
-> (FieldNumber -> FieldNumber -> FieldNumber)
-> (FieldNumber -> FieldNumber)
-> (FieldNumber -> FieldNumber)
-> (FieldNumber -> FieldNumber)
-> (Integer -> FieldNumber)
-> Num 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)
instance Show FieldNumber where
show :: FieldNumber -> String
show (FieldNumber Word64
n) = Word64 -> String
forall a. Show a => a -> String
show Word64
n
instance Arbitrary FieldNumber where
arbitrary :: Gen FieldNumber
arbitrary = (Word64 -> FieldNumber) -> Gen Word64 -> Gen FieldNumber
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Word64 -> FieldNumber
FieldNumber (Gen Word64 -> Gen FieldNumber) -> Gen Word64 -> Gen FieldNumber
forall a b. (a -> b) -> a -> b
$ (Word64, Word64) -> Gen Word64
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 (Int -> WireType -> ShowS
[WireType] -> ShowS
WireType -> String
(Int -> WireType -> ShowS)
-> (WireType -> String) -> ([WireType] -> ShowS) -> Show WireType
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, WireType -> WireType -> Bool
(WireType -> WireType -> Bool)
-> (WireType -> WireType -> Bool) -> Eq WireType
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, Eq WireType
Eq WireType
-> (WireType -> WireType -> Ordering)
-> (WireType -> WireType -> Bool)
-> (WireType -> WireType -> Bool)
-> (WireType -> WireType -> Bool)
-> (WireType -> WireType -> Bool)
-> (WireType -> WireType -> WireType)
-> (WireType -> WireType -> WireType)
-> Ord 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
$cp1Ord :: Eq WireType
Ord)