module Poseidon.PoseidonVersion where
import Data.Aeson (FromJSON, ToJSON (..), parseJSON, toJSON)
import Data.Version (Version (..), makeVersion, showVersion)
newtype PoseidonVersion = PoseidonVersion Version
deriving (Int -> PoseidonVersion -> ShowS
[PoseidonVersion] -> ShowS
PoseidonVersion -> String
(Int -> PoseidonVersion -> ShowS)
-> (PoseidonVersion -> String)
-> ([PoseidonVersion] -> ShowS)
-> Show PoseidonVersion
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PoseidonVersion -> ShowS
showsPrec :: Int -> PoseidonVersion -> ShowS
$cshow :: PoseidonVersion -> String
show :: PoseidonVersion -> String
$cshowList :: [PoseidonVersion] -> ShowS
showList :: [PoseidonVersion] -> ShowS
Show, PoseidonVersion -> PoseidonVersion -> Bool
(PoseidonVersion -> PoseidonVersion -> Bool)
-> (PoseidonVersion -> PoseidonVersion -> Bool)
-> Eq PoseidonVersion
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PoseidonVersion -> PoseidonVersion -> Bool
== :: PoseidonVersion -> PoseidonVersion -> Bool
$c/= :: PoseidonVersion -> PoseidonVersion -> Bool
/= :: PoseidonVersion -> PoseidonVersion -> Bool
Eq, Eq PoseidonVersion
Eq PoseidonVersion =>
(PoseidonVersion -> PoseidonVersion -> Ordering)
-> (PoseidonVersion -> PoseidonVersion -> Bool)
-> (PoseidonVersion -> PoseidonVersion -> Bool)
-> (PoseidonVersion -> PoseidonVersion -> Bool)
-> (PoseidonVersion -> PoseidonVersion -> Bool)
-> (PoseidonVersion -> PoseidonVersion -> PoseidonVersion)
-> (PoseidonVersion -> PoseidonVersion -> PoseidonVersion)
-> Ord PoseidonVersion
PoseidonVersion -> PoseidonVersion -> Bool
PoseidonVersion -> PoseidonVersion -> Ordering
PoseidonVersion -> PoseidonVersion -> PoseidonVersion
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 :: PoseidonVersion -> PoseidonVersion -> Ordering
compare :: PoseidonVersion -> PoseidonVersion -> Ordering
$c< :: PoseidonVersion -> PoseidonVersion -> Bool
< :: PoseidonVersion -> PoseidonVersion -> Bool
$c<= :: PoseidonVersion -> PoseidonVersion -> Bool
<= :: PoseidonVersion -> PoseidonVersion -> Bool
$c> :: PoseidonVersion -> PoseidonVersion -> Bool
> :: PoseidonVersion -> PoseidonVersion -> Bool
$c>= :: PoseidonVersion -> PoseidonVersion -> Bool
>= :: PoseidonVersion -> PoseidonVersion -> Bool
$cmax :: PoseidonVersion -> PoseidonVersion -> PoseidonVersion
max :: PoseidonVersion -> PoseidonVersion -> PoseidonVersion
$cmin :: PoseidonVersion -> PoseidonVersion -> PoseidonVersion
min :: PoseidonVersion -> PoseidonVersion -> PoseidonVersion
Ord)
instance FromJSON PoseidonVersion where parseJSON :: Value -> Parser PoseidonVersion
parseJSON Value
v = Version -> PoseidonVersion
PoseidonVersion (Version -> PoseidonVersion)
-> Parser Version -> Parser PoseidonVersion
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser Version
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
instance ToJSON PoseidonVersion where toJSON :: PoseidonVersion -> Value
toJSON (PoseidonVersion Version
v) = Version -> Value
forall a. ToJSON a => a -> Value
toJSON Version
v
validPoseidonVersions :: [PoseidonVersion]
validPoseidonVersions :: [PoseidonVersion]
validPoseidonVersions = ([Int] -> PoseidonVersion) -> [[Int]] -> [PoseidonVersion]
forall a b. (a -> b) -> [a] -> [b]
map (Version -> PoseidonVersion
PoseidonVersion (Version -> PoseidonVersion)
-> ([Int] -> Version) -> [Int] -> PoseidonVersion
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> Version
makeVersion) [[Int
2,Int
5,Int
0], [Int
2,Int
6,Int
0], [Int
2,Int
7,Int
0], [Int
2,Int
7,Int
1], [Int
3,Int
0,Int
0]]
latestPoseidonVersion :: PoseidonVersion
latestPoseidonVersion :: PoseidonVersion
latestPoseidonVersion = [PoseidonVersion] -> PoseidonVersion
forall a. HasCallStack => [a] -> a
last [PoseidonVersion]
validPoseidonVersions
asVersion :: PoseidonVersion -> Version
asVersion :: PoseidonVersion -> Version
asVersion (PoseidonVersion Version
x) = Version
x
showPoseidonVersion :: PoseidonVersion -> String
showPoseidonVersion :: PoseidonVersion -> String
showPoseidonVersion (PoseidonVersion Version
x) = Version -> String
showVersion Version
x
minimalRequiredClientVersion :: Version
minimalRequiredClientVersion :: Version
minimalRequiredClientVersion = [Int] -> Version
makeVersion [Int
1, Int
1, Int
8, Int
5]
data VersionedFile = VersionedFile PoseidonVersion FilePath