module Network.MoHWS.HTTP.Version (
T(Cons), major, minor,
http1_1, http1_0,
pInRequest,
) where
import Text.ParserCombinators.Parsec (Parser, string, digit, many1, char, )
import Network.MoHWS.Utility (readM, )
import Control.Monad (liftM2, )
data T = Cons {T -> Int
major, T -> Int
minor :: Int}
deriving (T -> T -> Bool
(T -> T -> Bool) -> (T -> T -> Bool) -> Eq T
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: T -> T -> Bool
$c/= :: T -> T -> Bool
== :: T -> T -> Bool
$c== :: T -> T -> Bool
Eq,Eq T
Eq T
-> (T -> T -> Ordering)
-> (T -> T -> Bool)
-> (T -> T -> Bool)
-> (T -> T -> Bool)
-> (T -> T -> Bool)
-> (T -> T -> T)
-> (T -> T -> T)
-> Ord T
T -> T -> Bool
T -> T -> Ordering
T -> T -> T
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 :: T -> T -> T
$cmin :: T -> T -> T
max :: T -> T -> T
$cmax :: T -> T -> T
>= :: T -> T -> Bool
$c>= :: T -> T -> Bool
> :: T -> T -> Bool
$c> :: T -> T -> Bool
<= :: T -> T -> Bool
$c<= :: T -> T -> Bool
< :: T -> T -> Bool
$c< :: T -> T -> Bool
compare :: T -> T -> Ordering
$ccompare :: T -> T -> Ordering
$cp1Ord :: Eq T
Ord)
instance Show T where
showsPrec :: Int -> T -> ShowS
showsPrec Int
_ T
v =
String -> ShowS
showString String
"HTTP/" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows (T -> Int
major T
v) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
String -> ShowS
showString String
"." ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows (T -> Int
minor T
v)
http1_1, http1_0 :: T
http1_1 :: T
http1_1 = Int -> Int -> T
Cons Int
1 Int
1
http1_0 :: T
http1_0 = Int -> Int -> T
Cons Int
1 Int
0
pInRequest :: Parser T
pInRequest :: Parser T
pInRequest =
(Int -> Int -> T)
-> ParsecT String () Identity Int
-> ParsecT String () Identity Int
-> Parser T
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 Int -> Int -> T
Cons
(String -> ParsecT String () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"HTTP/" ParsecT String () Identity String
-> ParsecT String () Identity Int -> ParsecT String () Identity Int
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ParsecT String () Identity Int
int)
(Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'.' ParsecT String () Identity Char
-> ParsecT String () Identity Int -> ParsecT String () Identity Int
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ParsecT String () Identity Int
int)
int :: Parser Int
int :: ParsecT String () Identity Int
int = ParsecT String () Identity Char
-> ParsecT String () Identity String
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 ParsecT String () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit ParsecT String () Identity String
-> (String -> ParsecT String () Identity Int)
-> ParsecT String () Identity Int
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> ParsecT String () Identity Int
forall a (m :: * -> *). (Read a, MonadFail m) => String -> m a
readM