{-# LANGUAGE LambdaCase #-}

-- | Common types for binary format (parser and serializer)
module RON.Binary.Types where

import           RON.Prelude

type Size = Word32

-- | Data block descriptor
data Desc

    = DOpClosed
    | DOpReduced
    | DOpHeader
    | DOpQueryHeader

    | DUuidReducer
    | DUuidObject
    | DUuidOp
    | DUuidRef

    | DAtomUuidZip
    | DUuidZipObject
    | DUuidZipOp
    | DUuidZipRef

    | DAtomUuid
    | DAtomInteger
    | DAtomString
    | DAtomFloat

    deriving (Int -> Desc
Desc -> Int
Desc -> [Desc]
Desc -> Desc
Desc -> Desc -> [Desc]
Desc -> Desc -> Desc -> [Desc]
(Desc -> Desc)
-> (Desc -> Desc)
-> (Int -> Desc)
-> (Desc -> Int)
-> (Desc -> [Desc])
-> (Desc -> Desc -> [Desc])
-> (Desc -> Desc -> [Desc])
-> (Desc -> Desc -> Desc -> [Desc])
-> Enum Desc
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 :: Desc -> Desc -> Desc -> [Desc]
$cenumFromThenTo :: Desc -> Desc -> Desc -> [Desc]
enumFromTo :: Desc -> Desc -> [Desc]
$cenumFromTo :: Desc -> Desc -> [Desc]
enumFromThen :: Desc -> Desc -> [Desc]
$cenumFromThen :: Desc -> Desc -> [Desc]
enumFrom :: Desc -> [Desc]
$cenumFrom :: Desc -> [Desc]
fromEnum :: Desc -> Int
$cfromEnum :: Desc -> Int
toEnum :: Int -> Desc
$ctoEnum :: Int -> Desc
pred :: Desc -> Desc
$cpred :: Desc -> Desc
succ :: Desc -> Desc
$csucc :: Desc -> Desc
Enum, Desc -> Desc -> Bool
(Desc -> Desc -> Bool) -> (Desc -> Desc -> Bool) -> Eq Desc
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Desc -> Desc -> Bool
$c/= :: Desc -> Desc -> Bool
== :: Desc -> Desc -> Bool
$c== :: Desc -> Desc -> Bool
Eq, Int -> Desc -> ShowS
[Desc] -> ShowS
Desc -> String
(Int -> Desc -> ShowS)
-> (Desc -> String) -> ([Desc] -> ShowS) -> Show Desc
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Desc] -> ShowS
$cshowList :: [Desc] -> ShowS
show :: Desc -> String
$cshow :: Desc -> String
showsPrec :: Int -> Desc -> ShowS
$cshowsPrec :: Int -> Desc -> ShowS
Show)

-- | Does the descriptor refer to an op
descIsOp :: Desc -> Bool
descIsOp :: Desc -> Bool
descIsOp = \case
    Desc
DOpClosed       -> Bool
True
    Desc
DOpReduced      -> Bool
True
    Desc
DOpHeader       -> Bool
True
    Desc
DOpQueryHeader  -> Bool
True
    Desc
_               -> Bool
False