0 | module TyTTP.HTTP.Protocol
15 | | OtherMethod String
19 | (==) OPTIONS OPTIONS = True
21 | (==) HEAD HEAD = True
22 | (==) POST POST = True
24 | (==) DELETE DELETE = True
25 | (==) TRACE TRACE = True
26 | (==) CONNECT CONNECT = True
27 | (==) (OtherMethod a) (OtherMethod b) = a == b
33 | OPTIONS => "OPTIONS"
40 | CONNECT => "CONNECT"
41 | OtherMethod str => str
45 | parseMethod : String -> Method
46 | parseMethod str = case str of
47 | "OPTIONS" => OPTIONS
54 | "CONNECT" => CONNECT
62 | | OtherVersion String
66 | (==) Version_1_0 Version_1_0 = True
67 | (==) Version_1_1 Version_1_1 = True
68 | (==) Version_2 Version_2 = True
69 | (==) (OtherVersion v1) (OtherVersion v2) = v1 == v2
75 | Version_1_0 => "1.0"
76 | Version_1_1 => "1.1"
81 | parseVersion : String -> Version
82 | parseVersion s = case s of
83 | "1.0" => Version_1_0
84 | "1.1" => Version_1_1
89 | StringHeaders : Type
90 | StringHeaders = List (String, String)
93 | interface HasContentType a where
94 | getContentType : a -> Maybe String
97 | implementation HasContentType StringHeaders where
98 | getContentType headers = lookup "content-type" headers
102 | HttpRequest : Type -> Type -> Type -> Type
103 | HttpRequest p h a = Request Method p Version h a
106 | mkRequest : (m : Method) -> p -> Version -> h -> a -> HttpRequest p h a
107 | mkRequest m p v h a = MkRequest m p v h a
112 | | SWITCHING_PROTOCOLS
118 | | NON_AUTHORITATIVE_INFORMATION
126 | | MOVED_PERMANENTLY
131 | | TEMPORARY_REDIRECT
132 | | PERMANENT_REDIRECT
138 | | METHOD_NOT_ALLOWED
140 | | PROXY_AUTHENTICATION_REQUIRED
145 | | PRECONDITION_FAILED
146 | | PAYLOAD_TOO_LARGE
148 | | UNSUPPORTED_MEDIA_TYPE
149 | | RANGE_NOT_SATISFIABLE
150 | | EXPECTATION_FAILED
152 | | MISDIRECTED_REQUEST
153 | | UNPROCESSABLE_ENTITY
155 | | FAILED_DEPENDENCY
158 | | PRECONDITION_REQUIRED
159 | | TOO_MANY_REQUESTS
160 | | REQUEST_HEADER_FIELDS_TOO_LARGE
161 | | UNAVAILABLE_FOR_LEGAL_REASONS
162 | | INTERNAL_SERVER_ERROR
165 | | SERVICE_UNAVAILABLE
167 | | HTTP_VERSION_NOT_SUPPORTED
168 | | VARIANT_ALSO_NEGOTIATES
169 | | INSUFFICIENT_STORAGE
171 | | BANDWIDTH_LIMIT_EXCEEDED
173 | | NETWORK_AUTHENTICATION_REQUIRED
176 | (.code) : Status -> Int
177 | (.code) status = case status of
179 | SWITCHING_PROTOCOLS => 101
185 | NON_AUTHORITATIVE_INFORMATION => 203
187 | RESET_CONTENT => 205
188 | PARTIAL_CONTENT => 206
189 | MULTI_STATUS => 207
190 | ALREADY_REPORTED => 208
192 | MULTIPLE_CHOICES => 300
193 | MOVED_PERMANENTLY => 301
196 | NOT_MODIFIED => 304
198 | TEMPORARY_REDIRECT => 307
199 | PERMANENT_REDIRECT => 308
201 | UNAUTHORIZED => 401
202 | PAYMENT_REQUIRED => 402
205 | METHOD_NOT_ALLOWED => 405
206 | NOT_ACCEPTABLE => 406
207 | PROXY_AUTHENTICATION_REQUIRED => 407
208 | REQUEST_TIMEOUT => 408
211 | LENGTH_REQUIRED => 411
212 | PRECONDITION_FAILED => 412
213 | PAYLOAD_TOO_LARGE => 413
214 | URI_TOO_LONG => 414
215 | UNSUPPORTED_MEDIA_TYPE => 415
216 | RANGE_NOT_SATISFIABLE => 416
217 | EXPECTATION_FAILED => 417
219 | MISDIRECTED_REQUEST => 421
220 | UNPROCESSABLE_ENTITY => 422
222 | FAILED_DEPENDENCY => 424
224 | UPGRADE_REQUIRED => 426
225 | PRECONDITION_REQUIRED => 428
226 | TOO_MANY_REQUESTS => 429
227 | REQUEST_HEADER_FIELDS_TOO_LARGE => 431
228 | UNAVAILABLE_FOR_LEGAL_REASONS => 451
229 | INTERNAL_SERVER_ERROR => 500
230 | NOT_IMPLEMENTED => 501
232 | SERVICE_UNAVAILABLE => 503
233 | GATEWAY_TIMEOUT => 504
234 | HTTP_VERSION_NOT_SUPPORTED => 505
235 | VARIANT_ALSO_NEGOTIATES => 506
236 | INSUFFICIENT_STORAGE => 507
237 | LOOP_DETECTED => 508
238 | BANDWIDTH_LIMIT_EXCEEDED => 509
239 | NOT_EXTENDED => 510
240 | NETWORK_AUTHENTICATION_REQUIRED => 511