module Database.Bloodhound.Internal.Client.Doc
( DocVersion (..),
ExternalDocVersion (..),
mkDocVersion,
VersionControl (..),
)
where
import Data.Aeson
import Data.Maybe
import GHC.Enum
newtype DocVersion = DocVersion
{ DocVersion -> Int
docVersionNumber :: Int
}
deriving stock (DocVersion -> DocVersion -> Bool
(DocVersion -> DocVersion -> Bool)
-> (DocVersion -> DocVersion -> Bool) -> Eq DocVersion
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DocVersion -> DocVersion -> Bool
== :: DocVersion -> DocVersion -> Bool
$c/= :: DocVersion -> DocVersion -> Bool
/= :: DocVersion -> DocVersion -> Bool
Eq, Int -> DocVersion -> ShowS
[DocVersion] -> ShowS
DocVersion -> String
(Int -> DocVersion -> ShowS)
-> (DocVersion -> String)
-> ([DocVersion] -> ShowS)
-> Show DocVersion
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DocVersion -> ShowS
showsPrec :: Int -> DocVersion -> ShowS
$cshow :: DocVersion -> String
show :: DocVersion -> String
$cshowList :: [DocVersion] -> ShowS
showList :: [DocVersion] -> ShowS
Show, Eq DocVersion
Eq DocVersion =>
(DocVersion -> DocVersion -> Ordering)
-> (DocVersion -> DocVersion -> Bool)
-> (DocVersion -> DocVersion -> Bool)
-> (DocVersion -> DocVersion -> Bool)
-> (DocVersion -> DocVersion -> Bool)
-> (DocVersion -> DocVersion -> DocVersion)
-> (DocVersion -> DocVersion -> DocVersion)
-> Ord DocVersion
DocVersion -> DocVersion -> Bool
DocVersion -> DocVersion -> Ordering
DocVersion -> DocVersion -> DocVersion
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
$ccompare :: DocVersion -> DocVersion -> Ordering
compare :: DocVersion -> DocVersion -> Ordering
$c< :: DocVersion -> DocVersion -> Bool
< :: DocVersion -> DocVersion -> Bool
$c<= :: DocVersion -> DocVersion -> Bool
<= :: DocVersion -> DocVersion -> Bool
$c> :: DocVersion -> DocVersion -> Bool
> :: DocVersion -> DocVersion -> Bool
$c>= :: DocVersion -> DocVersion -> Bool
>= :: DocVersion -> DocVersion -> Bool
$cmax :: DocVersion -> DocVersion -> DocVersion
max :: DocVersion -> DocVersion -> DocVersion
$cmin :: DocVersion -> DocVersion -> DocVersion
min :: DocVersion -> DocVersion -> DocVersion
Ord)
deriving newtype ([DocVersion] -> Value
[DocVersion] -> Encoding
DocVersion -> Bool
DocVersion -> Value
DocVersion -> Encoding
(DocVersion -> Value)
-> (DocVersion -> Encoding)
-> ([DocVersion] -> Value)
-> ([DocVersion] -> Encoding)
-> (DocVersion -> Bool)
-> ToJSON DocVersion
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: DocVersion -> Value
toJSON :: DocVersion -> Value
$ctoEncoding :: DocVersion -> Encoding
toEncoding :: DocVersion -> Encoding
$ctoJSONList :: [DocVersion] -> Value
toJSONList :: [DocVersion] -> Value
$ctoEncodingList :: [DocVersion] -> Encoding
toEncodingList :: [DocVersion] -> Encoding
$comitField :: DocVersion -> Bool
omitField :: DocVersion -> Bool
ToJSON)
mkDocVersion :: Int -> Maybe DocVersion
mkDocVersion :: Int -> Maybe DocVersion
mkDocVersion Int
i
| Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= DocVersion -> Int
docVersionNumber DocVersion
forall a. Bounded a => a
minBound
Bool -> Bool -> Bool
&& Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= DocVersion -> Int
docVersionNumber DocVersion
forall a. Bounded a => a
maxBound =
DocVersion -> Maybe DocVersion
forall a. a -> Maybe a
Just (DocVersion -> Maybe DocVersion) -> DocVersion -> Maybe DocVersion
forall a b. (a -> b) -> a -> b
$ Int -> DocVersion
DocVersion Int
i
| Bool
otherwise = Maybe DocVersion
forall a. Maybe a
Nothing
instance Bounded DocVersion where
minBound :: DocVersion
minBound = Int -> DocVersion
DocVersion Int
1
maxBound :: DocVersion
maxBound = Int -> DocVersion
DocVersion Int
9200000000000000000
instance Enum DocVersion where
succ :: DocVersion -> DocVersion
succ DocVersion
x
| DocVersion
x DocVersion -> DocVersion -> Bool
forall a. Eq a => a -> a -> Bool
/= DocVersion
forall a. Bounded a => a
maxBound = Int -> DocVersion
DocVersion (Int -> Int
forall a. Enum a => a -> a
succ (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ DocVersion -> Int
docVersionNumber DocVersion
x)
| Bool
otherwise = String -> DocVersion
forall a. String -> a
succError String
"DocVersion"
pred :: DocVersion -> DocVersion
pred DocVersion
x
| DocVersion
x DocVersion -> DocVersion -> Bool
forall a. Eq a => a -> a -> Bool
/= DocVersion
forall a. Bounded a => a
minBound = Int -> DocVersion
DocVersion (Int -> Int
forall a. Enum a => a -> a
pred (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ DocVersion -> Int
docVersionNumber DocVersion
x)
| Bool
otherwise = String -> DocVersion
forall a. String -> a
predError String
"DocVersion"
toEnum :: Int -> DocVersion
toEnum Int
i =
DocVersion -> Maybe DocVersion -> DocVersion
forall a. a -> Maybe a -> a
fromMaybe (String -> DocVersion
forall a. HasCallStack => String -> a
error (String -> DocVersion) -> String -> DocVersion
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
i String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" out of DocVersion range") (Maybe DocVersion -> DocVersion) -> Maybe DocVersion -> DocVersion
forall a b. (a -> b) -> a -> b
$ Int -> Maybe DocVersion
mkDocVersion Int
i
fromEnum :: DocVersion -> Int
fromEnum = DocVersion -> Int
docVersionNumber
enumFrom :: DocVersion -> [DocVersion]
enumFrom = DocVersion -> [DocVersion]
forall a. (Enum a, Bounded a) => a -> [a]
boundedEnumFrom
enumFromThen :: DocVersion -> DocVersion -> [DocVersion]
enumFromThen = DocVersion -> DocVersion -> [DocVersion]
forall a. (Enum a, Bounded a) => a -> a -> [a]
boundedEnumFromThen
instance FromJSON DocVersion where
parseJSON :: Value -> Parser DocVersion
parseJSON Value
v = do
Int
i <- Value -> Parser Int
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
Parser DocVersion
-> (DocVersion -> Parser DocVersion)
-> Maybe DocVersion
-> Parser DocVersion
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> Parser DocVersion
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"DocVersion out of range") DocVersion -> Parser DocVersion
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe DocVersion -> Parser DocVersion)
-> Maybe DocVersion -> Parser DocVersion
forall a b. (a -> b) -> a -> b
$ Int -> Maybe DocVersion
mkDocVersion Int
i
newtype ExternalDocVersion = ExternalDocVersion DocVersion
deriving newtype (ExternalDocVersion -> ExternalDocVersion -> Bool
(ExternalDocVersion -> ExternalDocVersion -> Bool)
-> (ExternalDocVersion -> ExternalDocVersion -> Bool)
-> Eq ExternalDocVersion
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ExternalDocVersion -> ExternalDocVersion -> Bool
== :: ExternalDocVersion -> ExternalDocVersion -> Bool
$c/= :: ExternalDocVersion -> ExternalDocVersion -> Bool
/= :: ExternalDocVersion -> ExternalDocVersion -> Bool
Eq, Eq ExternalDocVersion
Eq ExternalDocVersion =>
(ExternalDocVersion -> ExternalDocVersion -> Ordering)
-> (ExternalDocVersion -> ExternalDocVersion -> Bool)
-> (ExternalDocVersion -> ExternalDocVersion -> Bool)
-> (ExternalDocVersion -> ExternalDocVersion -> Bool)
-> (ExternalDocVersion -> ExternalDocVersion -> Bool)
-> (ExternalDocVersion -> ExternalDocVersion -> ExternalDocVersion)
-> (ExternalDocVersion -> ExternalDocVersion -> ExternalDocVersion)
-> Ord ExternalDocVersion
ExternalDocVersion -> ExternalDocVersion -> Bool
ExternalDocVersion -> ExternalDocVersion -> Ordering
ExternalDocVersion -> ExternalDocVersion -> ExternalDocVersion
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
$ccompare :: ExternalDocVersion -> ExternalDocVersion -> Ordering
compare :: ExternalDocVersion -> ExternalDocVersion -> Ordering
$c< :: ExternalDocVersion -> ExternalDocVersion -> Bool
< :: ExternalDocVersion -> ExternalDocVersion -> Bool
$c<= :: ExternalDocVersion -> ExternalDocVersion -> Bool
<= :: ExternalDocVersion -> ExternalDocVersion -> Bool
$c> :: ExternalDocVersion -> ExternalDocVersion -> Bool
> :: ExternalDocVersion -> ExternalDocVersion -> Bool
$c>= :: ExternalDocVersion -> ExternalDocVersion -> Bool
>= :: ExternalDocVersion -> ExternalDocVersion -> Bool
$cmax :: ExternalDocVersion -> ExternalDocVersion -> ExternalDocVersion
max :: ExternalDocVersion -> ExternalDocVersion -> ExternalDocVersion
$cmin :: ExternalDocVersion -> ExternalDocVersion -> ExternalDocVersion
min :: ExternalDocVersion -> ExternalDocVersion -> ExternalDocVersion
Ord, Int -> ExternalDocVersion -> ShowS
[ExternalDocVersion] -> ShowS
ExternalDocVersion -> String
(Int -> ExternalDocVersion -> ShowS)
-> (ExternalDocVersion -> String)
-> ([ExternalDocVersion] -> ShowS)
-> Show ExternalDocVersion
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ExternalDocVersion -> ShowS
showsPrec :: Int -> ExternalDocVersion -> ShowS
$cshow :: ExternalDocVersion -> String
show :: ExternalDocVersion -> String
$cshowList :: [ExternalDocVersion] -> ShowS
showList :: [ExternalDocVersion] -> ShowS
Show, ExternalDocVersion
ExternalDocVersion
-> ExternalDocVersion -> Bounded ExternalDocVersion
forall a. a -> a -> Bounded a
$cminBound :: ExternalDocVersion
minBound :: ExternalDocVersion
$cmaxBound :: ExternalDocVersion
maxBound :: ExternalDocVersion
Bounded, Int -> ExternalDocVersion
ExternalDocVersion -> Int
ExternalDocVersion -> [ExternalDocVersion]
ExternalDocVersion -> ExternalDocVersion
ExternalDocVersion -> ExternalDocVersion -> [ExternalDocVersion]
ExternalDocVersion
-> ExternalDocVersion -> ExternalDocVersion -> [ExternalDocVersion]
(ExternalDocVersion -> ExternalDocVersion)
-> (ExternalDocVersion -> ExternalDocVersion)
-> (Int -> ExternalDocVersion)
-> (ExternalDocVersion -> Int)
-> (ExternalDocVersion -> [ExternalDocVersion])
-> (ExternalDocVersion
-> ExternalDocVersion -> [ExternalDocVersion])
-> (ExternalDocVersion
-> ExternalDocVersion -> [ExternalDocVersion])
-> (ExternalDocVersion
-> ExternalDocVersion
-> ExternalDocVersion
-> [ExternalDocVersion])
-> Enum ExternalDocVersion
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: ExternalDocVersion -> ExternalDocVersion
succ :: ExternalDocVersion -> ExternalDocVersion
$cpred :: ExternalDocVersion -> ExternalDocVersion
pred :: ExternalDocVersion -> ExternalDocVersion
$ctoEnum :: Int -> ExternalDocVersion
toEnum :: Int -> ExternalDocVersion
$cfromEnum :: ExternalDocVersion -> Int
fromEnum :: ExternalDocVersion -> Int
$cenumFrom :: ExternalDocVersion -> [ExternalDocVersion]
enumFrom :: ExternalDocVersion -> [ExternalDocVersion]
$cenumFromThen :: ExternalDocVersion -> ExternalDocVersion -> [ExternalDocVersion]
enumFromThen :: ExternalDocVersion -> ExternalDocVersion -> [ExternalDocVersion]
$cenumFromTo :: ExternalDocVersion -> ExternalDocVersion -> [ExternalDocVersion]
enumFromTo :: ExternalDocVersion -> ExternalDocVersion -> [ExternalDocVersion]
$cenumFromThenTo :: ExternalDocVersion
-> ExternalDocVersion -> ExternalDocVersion -> [ExternalDocVersion]
enumFromThenTo :: ExternalDocVersion
-> ExternalDocVersion -> ExternalDocVersion -> [ExternalDocVersion]
Enum, [ExternalDocVersion] -> Value
[ExternalDocVersion] -> Encoding
ExternalDocVersion -> Bool
ExternalDocVersion -> Value
ExternalDocVersion -> Encoding
(ExternalDocVersion -> Value)
-> (ExternalDocVersion -> Encoding)
-> ([ExternalDocVersion] -> Value)
-> ([ExternalDocVersion] -> Encoding)
-> (ExternalDocVersion -> Bool)
-> ToJSON ExternalDocVersion
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: ExternalDocVersion -> Value
toJSON :: ExternalDocVersion -> Value
$ctoEncoding :: ExternalDocVersion -> Encoding
toEncoding :: ExternalDocVersion -> Encoding
$ctoJSONList :: [ExternalDocVersion] -> Value
toJSONList :: [ExternalDocVersion] -> Value
$ctoEncodingList :: [ExternalDocVersion] -> Encoding
toEncodingList :: [ExternalDocVersion] -> Encoding
$comitField :: ExternalDocVersion -> Bool
omitField :: ExternalDocVersion -> Bool
ToJSON)
data VersionControl
=
NoVersionControl
|
InternalVersion DocVersion
|
ExternalGT ExternalDocVersion
|
ExternalGTE ExternalDocVersion
|
ForceVersion ExternalDocVersion
deriving stock (VersionControl -> VersionControl -> Bool
(VersionControl -> VersionControl -> Bool)
-> (VersionControl -> VersionControl -> Bool) -> Eq VersionControl
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VersionControl -> VersionControl -> Bool
== :: VersionControl -> VersionControl -> Bool
$c/= :: VersionControl -> VersionControl -> Bool
/= :: VersionControl -> VersionControl -> Bool
Eq, Int -> VersionControl -> ShowS
[VersionControl] -> ShowS
VersionControl -> String
(Int -> VersionControl -> ShowS)
-> (VersionControl -> String)
-> ([VersionControl] -> ShowS)
-> Show VersionControl
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VersionControl -> ShowS
showsPrec :: Int -> VersionControl -> ShowS
$cshow :: VersionControl -> String
show :: VersionControl -> String
$cshowList :: [VersionControl] -> ShowS
showList :: [VersionControl] -> ShowS
Show, Eq VersionControl
Eq VersionControl =>
(VersionControl -> VersionControl -> Ordering)
-> (VersionControl -> VersionControl -> Bool)
-> (VersionControl -> VersionControl -> Bool)
-> (VersionControl -> VersionControl -> Bool)
-> (VersionControl -> VersionControl -> Bool)
-> (VersionControl -> VersionControl -> VersionControl)
-> (VersionControl -> VersionControl -> VersionControl)
-> Ord VersionControl
VersionControl -> VersionControl -> Bool
VersionControl -> VersionControl -> Ordering
VersionControl -> VersionControl -> VersionControl
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
$ccompare :: VersionControl -> VersionControl -> Ordering
compare :: VersionControl -> VersionControl -> Ordering
$c< :: VersionControl -> VersionControl -> Bool
< :: VersionControl -> VersionControl -> Bool
$c<= :: VersionControl -> VersionControl -> Bool
<= :: VersionControl -> VersionControl -> Bool
$c> :: VersionControl -> VersionControl -> Bool
> :: VersionControl -> VersionControl -> Bool
$c>= :: VersionControl -> VersionControl -> Bool
>= :: VersionControl -> VersionControl -> Bool
$cmax :: VersionControl -> VersionControl -> VersionControl
max :: VersionControl -> VersionControl -> VersionControl
$cmin :: VersionControl -> VersionControl -> VersionControl
min :: VersionControl -> VersionControl -> VersionControl
Ord)