module Wobsurv.Util.HTTP.Model where
import BasePrelude
import qualified Data.ByteString as ByteString
type BS =
ByteString.ByteString
type Version =
(Word, Word)
data Header =
ConnectionHeader ConnectionHeader |
ContentLengthHeader ContentLengthHeader |
ContentTypeHeader ContentTypeHeader |
KeepAliveHeader KeepAliveHeader
deriving (Show, Read, Eq, Ord, Typeable, Generic)
type ConnectionHeader =
Bool
type ContentLengthHeader =
Word
type ContentTypeHeader =
(BS, Maybe Charset)
type KeepAliveHeader =
(Word, Maybe Word)
data Charset =
UTF8
deriving (Show, Read, Eq, Ord, Enum, Bounded, Typeable, Generic)
data StandardMethod =
Options | Get | Head | Post | Put | Delete | Trace | Connect
deriving (Show, Read, Eq, Ord, Enum, Bounded, Typeable, Generic)
type Method =
Either StandardMethod BS
type Status =
(Word, BS)
ok :: Status = (200, "OK")
badRequest :: Status = (400, "Bad Request")
unauthorized :: Status = (401, "Unauthorized")
forbidden :: Status = (403, "Forbidden")
notFound :: Status = (404, "Not Found")
methodNotAllowed :: Status = (405, "Method Not Allowed")
requestTimeOut :: Status = (408, "Request Time-out")
entityTooLarge :: Status = (413, "Entity Too Large")
requestURITooLarge :: Status = (414, "Request-URI Too Large")
notImplemented :: Status = (501, "Not Implemented")
serviceUnavailable :: Status = (503, "Service Unavailable")
httpVersionNotSupported :: Status = (505, "HTTP Version not supported")
data URI =
AbsoluteURI !Scheme !Authority !(Maybe Port) !RelativeURI |
SchemeRelativeURI !Authority !(Maybe Port) !RelativeURI |
RelativeURI !RelativeURI
deriving (Show, Read, Eq, Ord, Typeable, Generic)
type RelativeURI =
(Maybe RelativePath, Maybe Query, Maybe Fragment)
type Authority =
Either Domain IP
data Scheme =
HTTP | HTTPS
deriving (Show, Read, Eq, Ord, Enum, Bounded, Typeable, Generic)
type Domain =
BS
type IP =
BS
type Port =
Int
type RelativePath =
BS
type Query =
BS
type Fragment =
BS