module JVM.Data.JVMVersion where
import Data.Binary (Word16)
import JVM.Data.Pretty
newtype JVMVersion = JVMVersion Word16 deriving (JVMVersion -> JVMVersion -> Bool
(JVMVersion -> JVMVersion -> Bool)
-> (JVMVersion -> JVMVersion -> Bool) -> Eq JVMVersion
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JVMVersion -> JVMVersion -> Bool
== :: JVMVersion -> JVMVersion -> Bool
$c/= :: JVMVersion -> JVMVersion -> Bool
/= :: JVMVersion -> JVMVersion -> Bool
Eq, Eq JVMVersion
Eq JVMVersion =>
(JVMVersion -> JVMVersion -> Ordering)
-> (JVMVersion -> JVMVersion -> Bool)
-> (JVMVersion -> JVMVersion -> Bool)
-> (JVMVersion -> JVMVersion -> Bool)
-> (JVMVersion -> JVMVersion -> Bool)
-> (JVMVersion -> JVMVersion -> JVMVersion)
-> (JVMVersion -> JVMVersion -> JVMVersion)
-> Ord JVMVersion
JVMVersion -> JVMVersion -> Bool
JVMVersion -> JVMVersion -> Ordering
JVMVersion -> JVMVersion -> JVMVersion
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 :: JVMVersion -> JVMVersion -> Ordering
compare :: JVMVersion -> JVMVersion -> Ordering
$c< :: JVMVersion -> JVMVersion -> Bool
< :: JVMVersion -> JVMVersion -> Bool
$c<= :: JVMVersion -> JVMVersion -> Bool
<= :: JVMVersion -> JVMVersion -> Bool
$c> :: JVMVersion -> JVMVersion -> Bool
> :: JVMVersion -> JVMVersion -> Bool
$c>= :: JVMVersion -> JVMVersion -> Bool
>= :: JVMVersion -> JVMVersion -> Bool
$cmax :: JVMVersion -> JVMVersion -> JVMVersion
max :: JVMVersion -> JVMVersion -> JVMVersion
$cmin :: JVMVersion -> JVMVersion -> JVMVersion
min :: JVMVersion -> JVMVersion -> JVMVersion
Ord, Int -> JVMVersion -> ShowS
[JVMVersion] -> ShowS
JVMVersion -> String
(Int -> JVMVersion -> ShowS)
-> (JVMVersion -> String)
-> ([JVMVersion] -> ShowS)
-> Show JVMVersion
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JVMVersion -> ShowS
showsPrec :: Int -> JVMVersion -> ShowS
$cshow :: JVMVersion -> String
show :: JVMVersion -> String
$cshowList :: [JVMVersion] -> ShowS
showList :: [JVMVersion] -> ShowS
Show)
newtype MajorVersion = MajorVersion Word16 deriving (MajorVersion -> MajorVersion -> Bool
(MajorVersion -> MajorVersion -> Bool)
-> (MajorVersion -> MajorVersion -> Bool) -> Eq MajorVersion
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MajorVersion -> MajorVersion -> Bool
== :: MajorVersion -> MajorVersion -> Bool
$c/= :: MajorVersion -> MajorVersion -> Bool
/= :: MajorVersion -> MajorVersion -> Bool
Eq, Eq MajorVersion
Eq MajorVersion =>
(MajorVersion -> MajorVersion -> Ordering)
-> (MajorVersion -> MajorVersion -> Bool)
-> (MajorVersion -> MajorVersion -> Bool)
-> (MajorVersion -> MajorVersion -> Bool)
-> (MajorVersion -> MajorVersion -> Bool)
-> (MajorVersion -> MajorVersion -> MajorVersion)
-> (MajorVersion -> MajorVersion -> MajorVersion)
-> Ord MajorVersion
MajorVersion -> MajorVersion -> Bool
MajorVersion -> MajorVersion -> Ordering
MajorVersion -> MajorVersion -> MajorVersion
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 :: MajorVersion -> MajorVersion -> Ordering
compare :: MajorVersion -> MajorVersion -> Ordering
$c< :: MajorVersion -> MajorVersion -> Bool
< :: MajorVersion -> MajorVersion -> Bool
$c<= :: MajorVersion -> MajorVersion -> Bool
<= :: MajorVersion -> MajorVersion -> Bool
$c> :: MajorVersion -> MajorVersion -> Bool
> :: MajorVersion -> MajorVersion -> Bool
$c>= :: MajorVersion -> MajorVersion -> Bool
>= :: MajorVersion -> MajorVersion -> Bool
$cmax :: MajorVersion -> MajorVersion -> MajorVersion
max :: MajorVersion -> MajorVersion -> MajorVersion
$cmin :: MajorVersion -> MajorVersion -> MajorVersion
min :: MajorVersion -> MajorVersion -> MajorVersion
Ord, Integer -> MajorVersion
MajorVersion -> MajorVersion
MajorVersion -> MajorVersion -> MajorVersion
(MajorVersion -> MajorVersion -> MajorVersion)
-> (MajorVersion -> MajorVersion -> MajorVersion)
-> (MajorVersion -> MajorVersion -> MajorVersion)
-> (MajorVersion -> MajorVersion)
-> (MajorVersion -> MajorVersion)
-> (MajorVersion -> MajorVersion)
-> (Integer -> MajorVersion)
-> Num MajorVersion
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: MajorVersion -> MajorVersion -> MajorVersion
+ :: MajorVersion -> MajorVersion -> MajorVersion
$c- :: MajorVersion -> MajorVersion -> MajorVersion
- :: MajorVersion -> MajorVersion -> MajorVersion
$c* :: MajorVersion -> MajorVersion -> MajorVersion
* :: MajorVersion -> MajorVersion -> MajorVersion
$cnegate :: MajorVersion -> MajorVersion
negate :: MajorVersion -> MajorVersion
$cabs :: MajorVersion -> MajorVersion
abs :: MajorVersion -> MajorVersion
$csignum :: MajorVersion -> MajorVersion
signum :: MajorVersion -> MajorVersion
$cfromInteger :: Integer -> MajorVersion
fromInteger :: Integer -> MajorVersion
Num, Int -> MajorVersion -> ShowS
[MajorVersion] -> ShowS
MajorVersion -> String
(Int -> MajorVersion -> ShowS)
-> (MajorVersion -> String)
-> ([MajorVersion] -> ShowS)
-> Show MajorVersion
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MajorVersion -> ShowS
showsPrec :: Int -> MajorVersion -> ShowS
$cshow :: MajorVersion -> String
show :: MajorVersion -> String
$cshowList :: [MajorVersion] -> ShowS
showList :: [MajorVersion] -> ShowS
Show)
newtype MinorVersion = MinorVersion Word16 deriving (MinorVersion -> MinorVersion -> Bool
(MinorVersion -> MinorVersion -> Bool)
-> (MinorVersion -> MinorVersion -> Bool) -> Eq MinorVersion
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MinorVersion -> MinorVersion -> Bool
== :: MinorVersion -> MinorVersion -> Bool
$c/= :: MinorVersion -> MinorVersion -> Bool
/= :: MinorVersion -> MinorVersion -> Bool
Eq, Eq MinorVersion
Eq MinorVersion =>
(MinorVersion -> MinorVersion -> Ordering)
-> (MinorVersion -> MinorVersion -> Bool)
-> (MinorVersion -> MinorVersion -> Bool)
-> (MinorVersion -> MinorVersion -> Bool)
-> (MinorVersion -> MinorVersion -> Bool)
-> (MinorVersion -> MinorVersion -> MinorVersion)
-> (MinorVersion -> MinorVersion -> MinorVersion)
-> Ord MinorVersion
MinorVersion -> MinorVersion -> Bool
MinorVersion -> MinorVersion -> Ordering
MinorVersion -> MinorVersion -> MinorVersion
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 :: MinorVersion -> MinorVersion -> Ordering
compare :: MinorVersion -> MinorVersion -> Ordering
$c< :: MinorVersion -> MinorVersion -> Bool
< :: MinorVersion -> MinorVersion -> Bool
$c<= :: MinorVersion -> MinorVersion -> Bool
<= :: MinorVersion -> MinorVersion -> Bool
$c> :: MinorVersion -> MinorVersion -> Bool
> :: MinorVersion -> MinorVersion -> Bool
$c>= :: MinorVersion -> MinorVersion -> Bool
>= :: MinorVersion -> MinorVersion -> Bool
$cmax :: MinorVersion -> MinorVersion -> MinorVersion
max :: MinorVersion -> MinorVersion -> MinorVersion
$cmin :: MinorVersion -> MinorVersion -> MinorVersion
min :: MinorVersion -> MinorVersion -> MinorVersion
Ord, Integer -> MinorVersion
MinorVersion -> MinorVersion
MinorVersion -> MinorVersion -> MinorVersion
(MinorVersion -> MinorVersion -> MinorVersion)
-> (MinorVersion -> MinorVersion -> MinorVersion)
-> (MinorVersion -> MinorVersion -> MinorVersion)
-> (MinorVersion -> MinorVersion)
-> (MinorVersion -> MinorVersion)
-> (MinorVersion -> MinorVersion)
-> (Integer -> MinorVersion)
-> Num MinorVersion
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: MinorVersion -> MinorVersion -> MinorVersion
+ :: MinorVersion -> MinorVersion -> MinorVersion
$c- :: MinorVersion -> MinorVersion -> MinorVersion
- :: MinorVersion -> MinorVersion -> MinorVersion
$c* :: MinorVersion -> MinorVersion -> MinorVersion
* :: MinorVersion -> MinorVersion -> MinorVersion
$cnegate :: MinorVersion -> MinorVersion
negate :: MinorVersion -> MinorVersion
$cabs :: MinorVersion -> MinorVersion
abs :: MinorVersion -> MinorVersion
$csignum :: MinorVersion -> MinorVersion
signum :: MinorVersion -> MinorVersion
$cfromInteger :: Integer -> MinorVersion
fromInteger :: Integer -> MinorVersion
Num, Int -> MinorVersion -> ShowS
[MinorVersion] -> ShowS
MinorVersion -> String
(Int -> MinorVersion -> ShowS)
-> (MinorVersion -> String)
-> ([MinorVersion] -> ShowS)
-> Show MinorVersion
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MinorVersion -> ShowS
showsPrec :: Int -> MinorVersion -> ShowS
$cshow :: MinorVersion -> String
show :: MinorVersion -> String
$cshowList :: [MinorVersion] -> ShowS
showList :: [MinorVersion] -> ShowS
Show)
unwrapMajor :: MajorVersion -> Word16
unwrapMajor :: MajorVersion -> Word16
unwrapMajor (MajorVersion Word16
v) = Word16
v
unwrapMinor :: MinorVersion -> Word16
unwrapMinor :: MinorVersion -> Word16
unwrapMinor (MinorVersion Word16
v) = Word16
v
getMajor :: JVMVersion -> MajorVersion
getMajor :: JVMVersion -> MajorVersion
getMajor (JVMVersion Word16
v) = Word16 -> MajorVersion
MajorVersion Word16
v
getMinor :: JVMVersion -> MinorVersion
getMinor :: JVMVersion -> MinorVersion
getMinor JVMVersion
_ = Word16 -> MinorVersion
MinorVersion Word16
0
java6 :: JVMVersion
java6 :: JVMVersion
java6 = Word16 -> JVMVersion
JVMVersion Word16
50
java7 :: JVMVersion
java7 :: JVMVersion
java7 = Word16 -> JVMVersion
JVMVersion Word16
51
java8 :: JVMVersion
java8 :: JVMVersion
java8 = Word16 -> JVMVersion
JVMVersion Word16
52
java9 :: JVMVersion
java9 :: JVMVersion
java9 = Word16 -> JVMVersion
JVMVersion Word16
53
java10 :: JVMVersion
java10 :: JVMVersion
java10 = Word16 -> JVMVersion
JVMVersion Word16
54
java11 :: JVMVersion
java11 :: JVMVersion
java11 = Word16 -> JVMVersion
JVMVersion Word16
55
java12 :: JVMVersion
java12 :: JVMVersion
java12 = Word16 -> JVMVersion
JVMVersion Word16
56
java13 :: JVMVersion
java13 :: JVMVersion
java13 = Word16 -> JVMVersion
JVMVersion Word16
57
java14 :: JVMVersion
java14 :: JVMVersion
java14 = Word16 -> JVMVersion
JVMVersion Word16
58
java15 :: JVMVersion
java15 :: JVMVersion
java15 = Word16 -> JVMVersion
JVMVersion Word16
59
java16 :: JVMVersion
java16 :: JVMVersion
java16 = Word16 -> JVMVersion
JVMVersion Word16
60
java17 :: JVMVersion
java17 :: JVMVersion
java17 = Word16 -> JVMVersion
JVMVersion Word16
61
java18 :: JVMVersion
java18 :: JVMVersion
java18 = Word16 -> JVMVersion
JVMVersion Word16
62
java19 :: JVMVersion
java19 :: JVMVersion
java19 = Word16 -> JVMVersion
JVMVersion Word16
63
java20 :: JVMVersion
java20 :: JVMVersion
java20 = Word16 -> JVMVersion
JVMVersion Word16
64
java21 :: JVMVersion
java21 :: JVMVersion
java21 = Word16 -> JVMVersion
JVMVersion Word16
65
isLTS :: JVMVersion -> Bool
isLTS :: JVMVersion -> Bool
isLTS JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java8 = Bool
True
isLTS JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java11 = Bool
True
isLTS JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java17 = Bool
True
isLTS JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java21 = Bool
True
isLTS JVMVersion
_ = Bool
False
isEOL :: JVMVersion -> Bool
isEOL :: JVMVersion -> Bool
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Ord a => a -> a -> Bool
<= JVMVersion
java7 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java9 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java10 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java12 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java13 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java14 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java15 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java16 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java18 = Bool
True
isEOL JVMVersion
jvm | JVMVersion
jvm JVMVersion -> JVMVersion -> Bool
forall a. Eq a => a -> a -> Bool
== JVMVersion
java19 = Bool
True
isEOL JVMVersion
_ = Bool
False
instance Pretty JVMVersion where
pretty :: forall ann. JVMVersion -> Doc ann
pretty (JVMVersion Word16
v) = case Word16
v of
Word16
50 -> Doc ann
"Java 6"
Word16
51 -> Doc ann
"Java 7"
Word16
52 -> Doc ann
"Java 8"
Word16
53 -> Doc ann
"Java 9"
Word16
54 -> Doc ann
"Java 10"
Word16
55 -> Doc ann
"Java 11"
Word16
56 -> Doc ann
"Java 12"
Word16
57 -> Doc ann
"Java 13"
Word16
58 -> Doc ann
"Java 14"
Word16
59 -> Doc ann
"Java 15"
Word16
60 -> Doc ann
"Java 16"
Word16
61 -> Doc ann
"Java 17"
Word16
62 -> Doc ann
"Java 18"
Word16
63 -> Doc ann
"Java 19"
Word16
64 -> Doc ann
"Java 20"
Word16
65 -> Doc ann
"Java 21"
Word16
_ -> Doc ann
"Unknown Version " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Word16 -> Doc ann
forall ann. Word16 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Word16
v