Files
hyper/src/status.rs
Sean McArthur f7124bb8e2 rustup: sweeping fixes for all the changes in 1.0-alpha
- Some switches to u64 instead of usize
- For now, allow(unstable)
- use associated types for all the Network stuff
2015-01-10 21:29:27 -08:00

1773 lines
54 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//! Status Codes
use std::fmt;
use std::num::{FromPrimitive, ToPrimitive};
use std::mem::transmute;
use std::cmp::Ordering::{self, Less, Equal, Greater};
// shamelessly lifted from Teepee. I tried a few schemes, this really
// does seem like the best.
/// An HTTP status code (`Status-Code` in RFC 2616).
///
/// This enum is absolutely exhaustive, covering all 500 possible values (100599).
///
/// For HTTP/2.0, statuses belonging to the 1xx Informational class are invalid.
///
/// As this is a Cstyle enum with each variant having a corresponding value, you may use the likes
/// of `Continue as u16` to retreive the value `100u16`. Normally, though, you should not need to do
/// any such thing; just use the status code as a `StatusCode`.
///
/// If you encounter a status code that you do not know how to deal with, you should treat it as the
/// `x00` status code—e.g. for code 123, treat it as 100 (Continue). This can be achieved with
/// `self.class().default_code()`:
///
/// ```rust
/// # use hyper::status::StatusCode::{Code123, Continue};
/// assert_eq!(Code123.class().default_code(), Continue);
/// ```
#[derive(Show)]
pub enum StatusCode {
/// 100 Continue
Continue = 100,
/// 101 Switching Protocols
SwitchingProtocols = 101,
/// 102 Processing
Processing = 102,
/// 103 (unregistered)
Code103 = 103,
/// 104 (unregistered)
Code104 = 104,
/// 105 (unregistered)
Code105 = 105,
/// 106 (unregistered)
Code106 = 106,
/// 107 (unregistered)
Code107 = 107,
/// 108 (unregistered)
Code108 = 108,
/// 109 (unregistered)
Code109 = 109,
/// 110 (unregistered)
Code110 = 110,
/// 111 (unregistered)
Code111 = 111,
/// 112 (unregistered)
Code112 = 112,
/// 113 (unregistered)
Code113 = 113,
/// 114 (unregistered)
Code114 = 114,
/// 115 (unregistered)
Code115 = 115,
/// 116 (unregistered)
Code116 = 116,
/// 117 (unregistered)
Code117 = 117,
/// 118 (unregistered)
Code118 = 118,
/// 119 (unregistered)
Code119 = 119,
/// 120 (unregistered)
Code120 = 120,
/// 121 (unregistered)
Code121 = 121,
/// 122 (unregistered)
Code122 = 122,
/// 123 (unregistered)
Code123 = 123,
/// 124 (unregistered)
Code124 = 124,
/// 125 (unregistered)
Code125 = 125,
/// 126 (unregistered)
Code126 = 126,
/// 127 (unregistered)
Code127 = 127,
/// 128 (unregistered)
Code128 = 128,
/// 129 (unregistered)
Code129 = 129,
/// 130 (unregistered)
Code130 = 130,
/// 131 (unregistered)
Code131 = 131,
/// 132 (unregistered)
Code132 = 132,
/// 133 (unregistered)
Code133 = 133,
/// 134 (unregistered)
Code134 = 134,
/// 135 (unregistered)
Code135 = 135,
/// 136 (unregistered)
Code136 = 136,
/// 137 (unregistered)
Code137 = 137,
/// 138 (unregistered)
Code138 = 138,
/// 139 (unregistered)
Code139 = 139,
/// 140 (unregistered)
Code140 = 140,
/// 141 (unregistered)
Code141 = 141,
/// 142 (unregistered)
Code142 = 142,
/// 143 (unregistered)
Code143 = 143,
/// 144 (unregistered)
Code144 = 144,
/// 145 (unregistered)
Code145 = 145,
/// 146 (unregistered)
Code146 = 146,
/// 147 (unregistered)
Code147 = 147,
/// 148 (unregistered)
Code148 = 148,
/// 149 (unregistered)
Code149 = 149,
/// 150 (unregistered)
Code150 = 150,
/// 151 (unregistered)
Code151 = 151,
/// 152 (unregistered)
Code152 = 152,
/// 153 (unregistered)
Code153 = 153,
/// 154 (unregistered)
Code154 = 154,
/// 155 (unregistered)
Code155 = 155,
/// 156 (unregistered)
Code156 = 156,
/// 157 (unregistered)
Code157 = 157,
/// 158 (unregistered)
Code158 = 158,
/// 159 (unregistered)
Code159 = 159,
/// 160 (unregistered)
Code160 = 160,
/// 161 (unregistered)
Code161 = 161,
/// 162 (unregistered)
Code162 = 162,
/// 163 (unregistered)
Code163 = 163,
/// 164 (unregistered)
Code164 = 164,
/// 165 (unregistered)
Code165 = 165,
/// 166 (unregistered)
Code166 = 166,
/// 167 (unregistered)
Code167 = 167,
/// 168 (unregistered)
Code168 = 168,
/// 169 (unregistered)
Code169 = 169,
/// 170 (unregistered)
Code170 = 170,
/// 171 (unregistered)
Code171 = 171,
/// 172 (unregistered)
Code172 = 172,
/// 173 (unregistered)
Code173 = 173,
/// 174 (unregistered)
Code174 = 174,
/// 175 (unregistered)
Code175 = 175,
/// 176 (unregistered)
Code176 = 176,
/// 177 (unregistered)
Code177 = 177,
/// 178 (unregistered)
Code178 = 178,
/// 179 (unregistered)
Code179 = 179,
/// 180 (unregistered)
Code180 = 180,
/// 181 (unregistered)
Code181 = 181,
/// 182 (unregistered)
Code182 = 182,
/// 183 (unregistered)
Code183 = 183,
/// 184 (unregistered)
Code184 = 184,
/// 185 (unregistered)
Code185 = 185,
/// 186 (unregistered)
Code186 = 186,
/// 187 (unregistered)
Code187 = 187,
/// 188 (unregistered)
Code188 = 188,
/// 189 (unregistered)
Code189 = 189,
/// 190 (unregistered)
Code190 = 190,
/// 191 (unregistered)
Code191 = 191,
/// 192 (unregistered)
Code192 = 192,
/// 193 (unregistered)
Code193 = 193,
/// 194 (unregistered)
Code194 = 194,
/// 195 (unregistered)
Code195 = 195,
/// 196 (unregistered)
Code196 = 196,
/// 197 (unregistered)
Code197 = 197,
/// 198 (unregistered)
Code198 = 198,
/// 199 (unregistered)
Code199 = 199,
/// 200 OK
Ok = 200,
/// 201 Created
Created = 201,
/// 202 Accepted
Accepted = 202,
/// 203 Non-Authoritative Information
NonAuthoritativeInformation = 203,
/// 204 No Content
NoContent = 204,
/// 205 Reset Content
ResetContent = 205,
/// 206 Partial Content
PartialContent = 206,
/// 207 Multi-Status
MultiStatus = 207,
/// 208 Already Reported
AlreadyReported = 208,
/// 209 (unregistered)
Code209 = 209,
/// 210 (unregistered)
Code210 = 210,
/// 211 (unregistered)
Code211 = 211,
/// 212 (unregistered)
Code212 = 212,
/// 213 (unregistered)
Code213 = 213,
/// 214 (unregistered)
Code214 = 214,
/// 215 (unregistered)
Code215 = 215,
/// 216 (unregistered)
Code216 = 216,
/// 217 (unregistered)
Code217 = 217,
/// 218 (unregistered)
Code218 = 218,
/// 219 (unregistered)
Code219 = 219,
/// 220 (unregistered)
Code220 = 220,
/// 221 (unregistered)
Code221 = 221,
/// 222 (unregistered)
Code222 = 222,
/// 223 (unregistered)
Code223 = 223,
/// 224 (unregistered)
Code224 = 224,
/// 225 (unregistered)
Code225 = 225,
/// 226 IM Used
ImUsed = 226,
/// 227 (unregistered)
Code227 = 227,
/// 228 (unregistered)
Code228 = 228,
/// 229 (unregistered)
Code229 = 229,
/// 230 (unregistered)
Code230 = 230,
/// 231 (unregistered)
Code231 = 231,
/// 232 (unregistered)
Code232 = 232,
/// 233 (unregistered)
Code233 = 233,
/// 234 (unregistered)
Code234 = 234,
/// 235 (unregistered)
Code235 = 235,
/// 236 (unregistered)
Code236 = 236,
/// 237 (unregistered)
Code237 = 237,
/// 238 (unregistered)
Code238 = 238,
/// 239 (unregistered)
Code239 = 239,
/// 240 (unregistered)
Code240 = 240,
/// 241 (unregistered)
Code241 = 241,
/// 242 (unregistered)
Code242 = 242,
/// 243 (unregistered)
Code243 = 243,
/// 244 (unregistered)
Code244 = 244,
/// 245 (unregistered)
Code245 = 245,
/// 246 (unregistered)
Code246 = 246,
/// 247 (unregistered)
Code247 = 247,
/// 248 (unregistered)
Code248 = 248,
/// 249 (unregistered)
Code249 = 249,
/// 250 (unregistered)
Code250 = 250,
/// 251 (unregistered)
Code251 = 251,
/// 252 (unregistered)
Code252 = 252,
/// 253 (unregistered)
Code253 = 253,
/// 254 (unregistered)
Code254 = 254,
/// 255 (unregistered)
Code255 = 255,
/// 256 (unregistered)
Code256 = 256,
/// 257 (unregistered)
Code257 = 257,
/// 258 (unregistered)
Code258 = 258,
/// 259 (unregistered)
Code259 = 259,
/// 260 (unregistered)
Code260 = 260,
/// 261 (unregistered)
Code261 = 261,
/// 262 (unregistered)
Code262 = 262,
/// 263 (unregistered)
Code263 = 263,
/// 264 (unregistered)
Code264 = 264,
/// 265 (unregistered)
Code265 = 265,
/// 266 (unregistered)
Code266 = 266,
/// 267 (unregistered)
Code267 = 267,
/// 268 (unregistered)
Code268 = 268,
/// 269 (unregistered)
Code269 = 269,
/// 270 (unregistered)
Code270 = 270,
/// 271 (unregistered)
Code271 = 271,
/// 272 (unregistered)
Code272 = 272,
/// 273 (unregistered)
Code273 = 273,
/// 274 (unregistered)
Code274 = 274,
/// 275 (unregistered)
Code275 = 275,
/// 276 (unregistered)
Code276 = 276,
/// 277 (unregistered)
Code277 = 277,
/// 278 (unregistered)
Code278 = 278,
/// 279 (unregistered)
Code279 = 279,
/// 280 (unregistered)
Code280 = 280,
/// 281 (unregistered)
Code281 = 281,
/// 282 (unregistered)
Code282 = 282,
/// 283 (unregistered)
Code283 = 283,
/// 284 (unregistered)
Code284 = 284,
/// 285 (unregistered)
Code285 = 285,
/// 286 (unregistered)
Code286 = 286,
/// 287 (unregistered)
Code287 = 287,
/// 288 (unregistered)
Code288 = 288,
/// 289 (unregistered)
Code289 = 289,
/// 290 (unregistered)
Code290 = 290,
/// 291 (unregistered)
Code291 = 291,
/// 292 (unregistered)
Code292 = 292,
/// 293 (unregistered)
Code293 = 293,
/// 294 (unregistered)
Code294 = 294,
/// 295 (unregistered)
Code295 = 295,
/// 296 (unregistered)
Code296 = 296,
/// 297 (unregistered)
Code297 = 297,
/// 298 (unregistered)
Code298 = 298,
/// 299 (unregistered)
Code299 = 299,
/// 300 Multiple Choices
MultipleChoices = 300,
/// 301 Moved Permanently
MovedPermanently = 301,
/// 302 Found
Found = 302,
/// 303 See Other
SeeOther = 303,
/// 304 Not Modified
NotModified = 304,
/// 305 Use Proxy
UseProxy = 305,
/// 306 Switch Proxy
SwitchProxy = 306,
/// 307 Temporary Redirect
TemporaryRedirect = 307,
/// 308 Permanent Redirect
PermanentRedirect = 308,
/// 309 (unregistered)
Code309 = 309,
/// 310 (unregistered)
Code310 = 310,
/// 311 (unregistered)
Code311 = 311,
/// 312 (unregistered)
Code312 = 312,
/// 313 (unregistered)
Code313 = 313,
/// 314 (unregistered)
Code314 = 314,
/// 315 (unregistered)
Code315 = 315,
/// 316 (unregistered)
Code316 = 316,
/// 317 (unregistered)
Code317 = 317,
/// 318 (unregistered)
Code318 = 318,
/// 319 (unregistered)
Code319 = 319,
/// 320 (unregistered)
Code320 = 320,
/// 321 (unregistered)
Code321 = 321,
/// 322 (unregistered)
Code322 = 322,
/// 323 (unregistered)
Code323 = 323,
/// 324 (unregistered)
Code324 = 324,
/// 325 (unregistered)
Code325 = 325,
/// 326 (unregistered)
Code326 = 326,
/// 327 (unregistered)
Code327 = 327,
/// 328 (unregistered)
Code328 = 328,
/// 329 (unregistered)
Code329 = 329,
/// 330 (unregistered)
Code330 = 330,
/// 331 (unregistered)
Code331 = 331,
/// 332 (unregistered)
Code332 = 332,
/// 333 (unregistered)
Code333 = 333,
/// 334 (unregistered)
Code334 = 334,
/// 335 (unregistered)
Code335 = 335,
/// 336 (unregistered)
Code336 = 336,
/// 337 (unregistered)
Code337 = 337,
/// 338 (unregistered)
Code338 = 338,
/// 339 (unregistered)
Code339 = 339,
/// 340 (unregistered)
Code340 = 340,
/// 341 (unregistered)
Code341 = 341,
/// 342 (unregistered)
Code342 = 342,
/// 343 (unregistered)
Code343 = 343,
/// 344 (unregistered)
Code344 = 344,
/// 345 (unregistered)
Code345 = 345,
/// 346 (unregistered)
Code346 = 346,
/// 347 (unregistered)
Code347 = 347,
/// 348 (unregistered)
Code348 = 348,
/// 349 (unregistered)
Code349 = 349,
/// 350 (unregistered)
Code350 = 350,
/// 351 (unregistered)
Code351 = 351,
/// 352 (unregistered)
Code352 = 352,
/// 353 (unregistered)
Code353 = 353,
/// 354 (unregistered)
Code354 = 354,
/// 355 (unregistered)
Code355 = 355,
/// 356 (unregistered)
Code356 = 356,
/// 357 (unregistered)
Code357 = 357,
/// 358 (unregistered)
Code358 = 358,
/// 359 (unregistered)
Code359 = 359,
/// 360 (unregistered)
Code360 = 360,
/// 361 (unregistered)
Code361 = 361,
/// 362 (unregistered)
Code362 = 362,
/// 363 (unregistered)
Code363 = 363,
/// 364 (unregistered)
Code364 = 364,
/// 365 (unregistered)
Code365 = 365,
/// 366 (unregistered)
Code366 = 366,
/// 367 (unregistered)
Code367 = 367,
/// 368 (unregistered)
Code368 = 368,
/// 369 (unregistered)
Code369 = 369,
/// 370 (unregistered)
Code370 = 370,
/// 371 (unregistered)
Code371 = 371,
/// 372 (unregistered)
Code372 = 372,
/// 373 (unregistered)
Code373 = 373,
/// 374 (unregistered)
Code374 = 374,
/// 375 (unregistered)
Code375 = 375,
/// 376 (unregistered)
Code376 = 376,
/// 377 (unregistered)
Code377 = 377,
/// 378 (unregistered)
Code378 = 378,
/// 379 (unregistered)
Code379 = 379,
/// 380 (unregistered)
Code380 = 380,
/// 381 (unregistered)
Code381 = 381,
/// 382 (unregistered)
Code382 = 382,
/// 383 (unregistered)
Code383 = 383,
/// 384 (unregistered)
Code384 = 384,
/// 385 (unregistered)
Code385 = 385,
/// 386 (unregistered)
Code386 = 386,
/// 387 (unregistered)
Code387 = 387,
/// 388 (unregistered)
Code388 = 388,
/// 389 (unregistered)
Code389 = 389,
/// 390 (unregistered)
Code390 = 390,
/// 391 (unregistered)
Code391 = 391,
/// 392 (unregistered)
Code392 = 392,
/// 393 (unregistered)
Code393 = 393,
/// 394 (unregistered)
Code394 = 394,
/// 395 (unregistered)
Code395 = 395,
/// 396 (unregistered)
Code396 = 396,
/// 397 (unregistered)
Code397 = 397,
/// 398 (unregistered)
Code398 = 398,
/// 399 (unregistered)
Code399 = 399,
/// 400 Bad Request
BadRequest = 400,
/// 401 Unauthorized
Unauthorized = 401,
/// 402 Payment Required
PaymentRequired = 402,
/// 403 Forbidden
Forbidden = 403,
/// 404 Not Found
NotFound = 404,
/// 405 Method Not Allowed
MethodNotAllowed = 405,
/// 406 Not Acceptable
NotAcceptable = 406,
/// 407 Proxy Authentication Required
ProxyAuthenticationRequired = 407,
/// 408 Request Timeout
RequestTimeout = 408,
/// 409 Conflict
Conflict = 409,
/// 410 Gone
Gone = 410,
/// 411 Length Required
LengthRequired = 411,
/// 412 Precondition Failed
PreconditionFailed = 412,
/// 413 Request Entity Too Large
RequestEntityTooLarge = 413,
/// 414 Request-URI Too Long
RequestUriTooLong = 414,
/// 415 Unsupported Media Type
UnsupportedMediaType = 415,
/// 416 Requested Range Not Satisfiable
RequestedRangeNotSatisfiable = 416,
/// 417 Expectation Failed
ExpectationFailed = 417,
/// 418 I'm a teapot
ImATeapot = 418,
/// 419 Authentication Timeout
AuthenticationTimeout = 419,
/// 420 (unregistered)
Code420 = 420,
/// 421 (unregistered)
Code421 = 421,
/// 422 Unprocessable Entity
UnprocessableEntity = 422,
/// 423 Locked
Locked = 423,
/// 424 Failed Dependency
FailedDependency = 424,
/// 425 Unordered Collection
UnorderedCollection = 425,
/// 426 Upgrade Required
UpgradeRequired = 426,
/// 427 (unregistered)
Code427 = 427,
/// 428 Precondition Required
PreconditionRequired = 428,
/// 429 Too Many Requests
TooManyRequests = 429,
/// 430 (unregistered)
Code430 = 430,
/// 431 Request Header Fields Too Large
RequestHeaderFieldsTooLarge = 431,
/// 432 (unregistered)
Code432 = 432,
/// 433 (unregistered)
Code433 = 433,
/// 434 (unregistered)
Code434 = 434,
/// 435 (unregistered)
Code435 = 435,
/// 436 (unregistered)
Code436 = 436,
/// 437 (unregistered)
Code437 = 437,
/// 438 (unregistered)
Code438 = 438,
/// 439 (unregistered)
Code439 = 439,
/// 440 (unregistered)
Code440 = 440,
/// 441 (unregistered)
Code441 = 441,
/// 442 (unregistered)
Code442 = 442,
/// 443 (unregistered)
Code443 = 443,
/// 444 (unregistered)
Code444 = 444,
/// 445 (unregistered)
Code445 = 445,
/// 446 (unregistered)
Code446 = 446,
/// 447 (unregistered)
Code447 = 447,
/// 448 (unregistered)
Code448 = 448,
/// 449 (unregistered)
Code449 = 449,
/// 450 (unregistered)
Code450 = 450,
/// 451 Unavailable For Legal Reasons
UnavailableForLegalReasons = 451,
/// 452 (unregistered)
Code452 = 452,
/// 453 (unregistered)
Code453 = 453,
/// 454 (unregistered)
Code454 = 454,
/// 455 (unregistered)
Code455 = 455,
/// 456 (unregistered)
Code456 = 456,
/// 457 (unregistered)
Code457 = 457,
/// 458 (unregistered)
Code458 = 458,
/// 459 (unregistered)
Code459 = 459,
/// 460 (unregistered)
Code460 = 460,
/// 461 (unregistered)
Code461 = 461,
/// 462 (unregistered)
Code462 = 462,
/// 463 (unregistered)
Code463 = 463,
/// 464 (unregistered)
Code464 = 464,
/// 465 (unregistered)
Code465 = 465,
/// 466 (unregistered)
Code466 = 466,
/// 467 (unregistered)
Code467 = 467,
/// 468 (unregistered)
Code468 = 468,
/// 469 (unregistered)
Code469 = 469,
/// 470 (unregistered)
Code470 = 470,
/// 471 (unregistered)
Code471 = 471,
/// 472 (unregistered)
Code472 = 472,
/// 473 (unregistered)
Code473 = 473,
/// 474 (unregistered)
Code474 = 474,
/// 475 (unregistered)
Code475 = 475,
/// 476 (unregistered)
Code476 = 476,
/// 477 (unregistered)
Code477 = 477,
/// 478 (unregistered)
Code478 = 478,
/// 479 (unregistered)
Code479 = 479,
/// 480 (unregistered)
Code480 = 480,
/// 481 (unregistered)
Code481 = 481,
/// 482 (unregistered)
Code482 = 482,
/// 483 (unregistered)
Code483 = 483,
/// 484 (unregistered)
Code484 = 484,
/// 485 (unregistered)
Code485 = 485,
/// 486 (unregistered)
Code486 = 486,
/// 487 (unregistered)
Code487 = 487,
/// 488 (unregistered)
Code488 = 488,
/// 489 (unregistered)
Code489 = 489,
/// 490 (unregistered)
Code490 = 490,
/// 491 (unregistered)
Code491 = 491,
/// 492 (unregistered)
Code492 = 492,
/// 493 (unregistered)
Code493 = 493,
/// 494 (unregistered)
Code494 = 494,
/// 495 (unregistered)
Code495 = 495,
/// 496 (unregistered)
Code496 = 496,
/// 497 (unregistered)
Code497 = 497,
/// 498 (unregistered)
Code498 = 498,
/// 499 (unregistered)
Code499 = 499,
/// 500 Internal Server Error
InternalServerError = 500,
/// 501 Not Implemented
NotImplemented = 501,
/// 502 Bad Gateway
BadGateway = 502,
/// 503 Service Unavailable
ServiceUnavailable = 503,
/// 504 Gateway Timeout
GatewayTimeout = 504,
/// 505 HTTP Version Not Supported
HttpVersionNotSupported = 505,
/// 506 Variant Also Negotiates
VariantAlsoNegotiates = 506,
/// 507 Insufficient Storage
InsufficientStorage = 507,
/// 508 Loop Detected
LoopDetected = 508,
/// 509 (unregistered)
Code509 = 509,
/// 510 Not Extended
NotExtended = 510,
/// 511 Network Authentication Required
NetworkAuthenticationRequired = 511,
/// 512 (unregistered)
Code512 = 512,
/// 513 (unregistered)
Code513 = 513,
/// 514 (unregistered)
Code514 = 514,
/// 515 (unregistered)
Code515 = 515,
/// 516 (unregistered)
Code516 = 516,
/// 517 (unregistered)
Code517 = 517,
/// 518 (unregistered)
Code518 = 518,
/// 519 (unregistered)
Code519 = 519,
/// 520 (unregistered)
Code520 = 520,
/// 521 (unregistered)
Code521 = 521,
/// 522 (unregistered)
Code522 = 522,
/// 523 (unregistered)
Code523 = 523,
/// 524 (unregistered)
Code524 = 524,
/// 525 (unregistered)
Code525 = 525,
/// 526 (unregistered)
Code526 = 526,
/// 527 (unregistered)
Code527 = 527,
/// 528 (unregistered)
Code528 = 528,
/// 529 (unregistered)
Code529 = 529,
/// 530 (unregistered)
Code530 = 530,
/// 531 (unregistered)
Code531 = 531,
/// 532 (unregistered)
Code532 = 532,
/// 533 (unregistered)
Code533 = 533,
/// 534 (unregistered)
Code534 = 534,
/// 535 (unregistered)
Code535 = 535,
/// 536 (unregistered)
Code536 = 536,
/// 537 (unregistered)
Code537 = 537,
/// 538 (unregistered)
Code538 = 538,
/// 539 (unregistered)
Code539 = 539,
/// 540 (unregistered)
Code540 = 540,
/// 541 (unregistered)
Code541 = 541,
/// 542 (unregistered)
Code542 = 542,
/// 543 (unregistered)
Code543 = 543,
/// 544 (unregistered)
Code544 = 544,
/// 545 (unregistered)
Code545 = 545,
/// 546 (unregistered)
Code546 = 546,
/// 547 (unregistered)
Code547 = 547,
/// 548 (unregistered)
Code548 = 548,
/// 549 (unregistered)
Code549 = 549,
/// 550 (unregistered)
Code550 = 550,
/// 551 (unregistered)
Code551 = 551,
/// 552 (unregistered)
Code552 = 552,
/// 553 (unregistered)
Code553 = 553,
/// 554 (unregistered)
Code554 = 554,
/// 555 (unregistered)
Code555 = 555,
/// 556 (unregistered)
Code556 = 556,
/// 557 (unregistered)
Code557 = 557,
/// 558 (unregistered)
Code558 = 558,
/// 559 (unregistered)
Code559 = 559,
/// 560 (unregistered)
Code560 = 560,
/// 561 (unregistered)
Code561 = 561,
/// 562 (unregistered)
Code562 = 562,
/// 563 (unregistered)
Code563 = 563,
/// 564 (unregistered)
Code564 = 564,
/// 565 (unregistered)
Code565 = 565,
/// 566 (unregistered)
Code566 = 566,
/// 567 (unregistered)
Code567 = 567,
/// 568 (unregistered)
Code568 = 568,
/// 569 (unregistered)
Code569 = 569,
/// 570 (unregistered)
Code570 = 570,
/// 571 (unregistered)
Code571 = 571,
/// 572 (unregistered)
Code572 = 572,
/// 573 (unregistered)
Code573 = 573,
/// 574 (unregistered)
Code574 = 574,
/// 575 (unregistered)
Code575 = 575,
/// 576 (unregistered)
Code576 = 576,
/// 577 (unregistered)
Code577 = 577,
/// 578 (unregistered)
Code578 = 578,
/// 579 (unregistered)
Code579 = 579,
/// 580 (unregistered)
Code580 = 580,
/// 581 (unregistered)
Code581 = 581,
/// 582 (unregistered)
Code582 = 582,
/// 583 (unregistered)
Code583 = 583,
/// 584 (unregistered)
Code584 = 584,
/// 585 (unregistered)
Code585 = 585,
/// 586 (unregistered)
Code586 = 586,
/// 587 (unregistered)
Code587 = 587,
/// 588 (unregistered)
Code588 = 588,
/// 589 (unregistered)
Code589 = 589,
/// 590 (unregistered)
Code590 = 590,
/// 591 (unregistered)
Code591 = 591,
/// 592 (unregistered)
Code592 = 592,
/// 593 (unregistered)
Code593 = 593,
/// 594 (unregistered)
Code594 = 594,
/// 595 (unregistered)
Code595 = 595,
/// 596 (unregistered)
Code596 = 596,
/// 597 (unregistered)
Code597 = 597,
/// 598 (unregistered)
Code598 = 598,
/// 599 (unregistered)
Code599 = 599,
}
impl StatusCode {
/// Get the standardised `Reason-Phrase` for this status code.
///
/// This is mostly here for servers writing responses, but could potentially have application at
/// other times.
///
/// The reason phrase is defined as being exclusively for human readers. You should avoid
/// derive any meaning from it at all costs.
///
/// Bear in mind also that in HTTP/2.0 the reason phrase is abolished from transmission, and so
/// this canonical reason phrase really is the only reason phrase youll find.
pub fn canonical_reason(&self) -> Option<&'static str> {
match *self {
StatusCode::Continue => Some("Continue"),
StatusCode::SwitchingProtocols => Some("Switching Protocols"),
StatusCode::Processing => Some("Processing"),
StatusCode::Code103 => None,
StatusCode::Code104 => None,
StatusCode::Code105 => None,
StatusCode::Code106 => None,
StatusCode::Code107 => None,
StatusCode::Code108 => None,
StatusCode::Code109 => None,
StatusCode::Code110 => None,
StatusCode::Code111 => None,
StatusCode::Code112 => None,
StatusCode::Code113 => None,
StatusCode::Code114 => None,
StatusCode::Code115 => None,
StatusCode::Code116 => None,
StatusCode::Code117 => None,
StatusCode::Code118 => None,
StatusCode::Code119 => None,
StatusCode::Code120 => None,
StatusCode::Code121 => None,
StatusCode::Code122 => None,
StatusCode::Code123 => None,
StatusCode::Code124 => None,
StatusCode::Code125 => None,
StatusCode::Code126 => None,
StatusCode::Code127 => None,
StatusCode::Code128 => None,
StatusCode::Code129 => None,
StatusCode::Code130 => None,
StatusCode::Code131 => None,
StatusCode::Code132 => None,
StatusCode::Code133 => None,
StatusCode::Code134 => None,
StatusCode::Code135 => None,
StatusCode::Code136 => None,
StatusCode::Code137 => None,
StatusCode::Code138 => None,
StatusCode::Code139 => None,
StatusCode::Code140 => None,
StatusCode::Code141 => None,
StatusCode::Code142 => None,
StatusCode::Code143 => None,
StatusCode::Code144 => None,
StatusCode::Code145 => None,
StatusCode::Code146 => None,
StatusCode::Code147 => None,
StatusCode::Code148 => None,
StatusCode::Code149 => None,
StatusCode::Code150 => None,
StatusCode::Code151 => None,
StatusCode::Code152 => None,
StatusCode::Code153 => None,
StatusCode::Code154 => None,
StatusCode::Code155 => None,
StatusCode::Code156 => None,
StatusCode::Code157 => None,
StatusCode::Code158 => None,
StatusCode::Code159 => None,
StatusCode::Code160 => None,
StatusCode::Code161 => None,
StatusCode::Code162 => None,
StatusCode::Code163 => None,
StatusCode::Code164 => None,
StatusCode::Code165 => None,
StatusCode::Code166 => None,
StatusCode::Code167 => None,
StatusCode::Code168 => None,
StatusCode::Code169 => None,
StatusCode::Code170 => None,
StatusCode::Code171 => None,
StatusCode::Code172 => None,
StatusCode::Code173 => None,
StatusCode::Code174 => None,
StatusCode::Code175 => None,
StatusCode::Code176 => None,
StatusCode::Code177 => None,
StatusCode::Code178 => None,
StatusCode::Code179 => None,
StatusCode::Code180 => None,
StatusCode::Code181 => None,
StatusCode::Code182 => None,
StatusCode::Code183 => None,
StatusCode::Code184 => None,
StatusCode::Code185 => None,
StatusCode::Code186 => None,
StatusCode::Code187 => None,
StatusCode::Code188 => None,
StatusCode::Code189 => None,
StatusCode::Code190 => None,
StatusCode::Code191 => None,
StatusCode::Code192 => None,
StatusCode::Code193 => None,
StatusCode::Code194 => None,
StatusCode::Code195 => None,
StatusCode::Code196 => None,
StatusCode::Code197 => None,
StatusCode::Code198 => None,
StatusCode::Code199 => None,
StatusCode::Ok => Some("OK"),
StatusCode::Created => Some("Created"),
StatusCode::Accepted => Some("Accepted"),
StatusCode::NonAuthoritativeInformation => Some("Non-Authoritative Information"),
StatusCode::NoContent => Some("No Content"),
StatusCode::ResetContent => Some("Reset Content"),
StatusCode::PartialContent => Some("Partial Content"),
StatusCode::MultiStatus => Some("Multi-Status"),
StatusCode::AlreadyReported => Some("Already Reported"),
StatusCode::Code209 => None,
StatusCode::Code210 => None,
StatusCode::Code211 => None,
StatusCode::Code212 => None,
StatusCode::Code213 => None,
StatusCode::Code214 => None,
StatusCode::Code215 => None,
StatusCode::Code216 => None,
StatusCode::Code217 => None,
StatusCode::Code218 => None,
StatusCode::Code219 => None,
StatusCode::Code220 => None,
StatusCode::Code221 => None,
StatusCode::Code222 => None,
StatusCode::Code223 => None,
StatusCode::Code224 => None,
StatusCode::Code225 => None,
StatusCode::ImUsed => Some("IM Used"),
StatusCode::Code227 => None,
StatusCode::Code228 => None,
StatusCode::Code229 => None,
StatusCode::Code230 => None,
StatusCode::Code231 => None,
StatusCode::Code232 => None,
StatusCode::Code233 => None,
StatusCode::Code234 => None,
StatusCode::Code235 => None,
StatusCode::Code236 => None,
StatusCode::Code237 => None,
StatusCode::Code238 => None,
StatusCode::Code239 => None,
StatusCode::Code240 => None,
StatusCode::Code241 => None,
StatusCode::Code242 => None,
StatusCode::Code243 => None,
StatusCode::Code244 => None,
StatusCode::Code245 => None,
StatusCode::Code246 => None,
StatusCode::Code247 => None,
StatusCode::Code248 => None,
StatusCode::Code249 => None,
StatusCode::Code250 => None,
StatusCode::Code251 => None,
StatusCode::Code252 => None,
StatusCode::Code253 => None,
StatusCode::Code254 => None,
StatusCode::Code255 => None,
StatusCode::Code256 => None,
StatusCode::Code257 => None,
StatusCode::Code258 => None,
StatusCode::Code259 => None,
StatusCode::Code260 => None,
StatusCode::Code261 => None,
StatusCode::Code262 => None,
StatusCode::Code263 => None,
StatusCode::Code264 => None,
StatusCode::Code265 => None,
StatusCode::Code266 => None,
StatusCode::Code267 => None,
StatusCode::Code268 => None,
StatusCode::Code269 => None,
StatusCode::Code270 => None,
StatusCode::Code271 => None,
StatusCode::Code272 => None,
StatusCode::Code273 => None,
StatusCode::Code274 => None,
StatusCode::Code275 => None,
StatusCode::Code276 => None,
StatusCode::Code277 => None,
StatusCode::Code278 => None,
StatusCode::Code279 => None,
StatusCode::Code280 => None,
StatusCode::Code281 => None,
StatusCode::Code282 => None,
StatusCode::Code283 => None,
StatusCode::Code284 => None,
StatusCode::Code285 => None,
StatusCode::Code286 => None,
StatusCode::Code287 => None,
StatusCode::Code288 => None,
StatusCode::Code289 => None,
StatusCode::Code290 => None,
StatusCode::Code291 => None,
StatusCode::Code292 => None,
StatusCode::Code293 => None,
StatusCode::Code294 => None,
StatusCode::Code295 => None,
StatusCode::Code296 => None,
StatusCode::Code297 => None,
StatusCode::Code298 => None,
StatusCode::Code299 => None,
StatusCode::MultipleChoices => Some("Multiple Choices"),
StatusCode::MovedPermanently => Some("Moved Permanently"),
StatusCode::Found => Some("Found"),
StatusCode::SeeOther => Some("See Other"),
StatusCode::NotModified => Some("Not Modified"),
StatusCode::UseProxy => Some("Use Proxy"),
StatusCode::SwitchProxy => Some("Switch Proxy"),
StatusCode::TemporaryRedirect => Some("Temporary Redirect"),
StatusCode::PermanentRedirect => Some("Permanent Redirect"),
StatusCode::Code309 => None,
StatusCode::Code310 => None,
StatusCode::Code311 => None,
StatusCode::Code312 => None,
StatusCode::Code313 => None,
StatusCode::Code314 => None,
StatusCode::Code315 => None,
StatusCode::Code316 => None,
StatusCode::Code317 => None,
StatusCode::Code318 => None,
StatusCode::Code319 => None,
StatusCode::Code320 => None,
StatusCode::Code321 => None,
StatusCode::Code322 => None,
StatusCode::Code323 => None,
StatusCode::Code324 => None,
StatusCode::Code325 => None,
StatusCode::Code326 => None,
StatusCode::Code327 => None,
StatusCode::Code328 => None,
StatusCode::Code329 => None,
StatusCode::Code330 => None,
StatusCode::Code331 => None,
StatusCode::Code332 => None,
StatusCode::Code333 => None,
StatusCode::Code334 => None,
StatusCode::Code335 => None,
StatusCode::Code336 => None,
StatusCode::Code337 => None,
StatusCode::Code338 => None,
StatusCode::Code339 => None,
StatusCode::Code340 => None,
StatusCode::Code341 => None,
StatusCode::Code342 => None,
StatusCode::Code343 => None,
StatusCode::Code344 => None,
StatusCode::Code345 => None,
StatusCode::Code346 => None,
StatusCode::Code347 => None,
StatusCode::Code348 => None,
StatusCode::Code349 => None,
StatusCode::Code350 => None,
StatusCode::Code351 => None,
StatusCode::Code352 => None,
StatusCode::Code353 => None,
StatusCode::Code354 => None,
StatusCode::Code355 => None,
StatusCode::Code356 => None,
StatusCode::Code357 => None,
StatusCode::Code358 => None,
StatusCode::Code359 => None,
StatusCode::Code360 => None,
StatusCode::Code361 => None,
StatusCode::Code362 => None,
StatusCode::Code363 => None,
StatusCode::Code364 => None,
StatusCode::Code365 => None,
StatusCode::Code366 => None,
StatusCode::Code367 => None,
StatusCode::Code368 => None,
StatusCode::Code369 => None,
StatusCode::Code370 => None,
StatusCode::Code371 => None,
StatusCode::Code372 => None,
StatusCode::Code373 => None,
StatusCode::Code374 => None,
StatusCode::Code375 => None,
StatusCode::Code376 => None,
StatusCode::Code377 => None,
StatusCode::Code378 => None,
StatusCode::Code379 => None,
StatusCode::Code380 => None,
StatusCode::Code381 => None,
StatusCode::Code382 => None,
StatusCode::Code383 => None,
StatusCode::Code384 => None,
StatusCode::Code385 => None,
StatusCode::Code386 => None,
StatusCode::Code387 => None,
StatusCode::Code388 => None,
StatusCode::Code389 => None,
StatusCode::Code390 => None,
StatusCode::Code391 => None,
StatusCode::Code392 => None,
StatusCode::Code393 => None,
StatusCode::Code394 => None,
StatusCode::Code395 => None,
StatusCode::Code396 => None,
StatusCode::Code397 => None,
StatusCode::Code398 => None,
StatusCode::Code399 => None,
StatusCode::BadRequest => Some("Bad Request"),
StatusCode::Unauthorized => Some("Unauthorized"),
StatusCode::PaymentRequired => Some("Payment Required"),
StatusCode::Forbidden => Some("Forbidden"),
StatusCode::NotFound => Some("Not Found"),
StatusCode::MethodNotAllowed => Some("Method Not Allowed"),
StatusCode::NotAcceptable => Some("Not Acceptable"),
StatusCode::ProxyAuthenticationRequired => Some("Proxy Authentication Required"),
StatusCode::RequestTimeout => Some("Request Timeout"),
StatusCode::Conflict => Some("Conflict"),
StatusCode::Gone => Some("Gone"),
StatusCode::LengthRequired => Some("Length Required"),
StatusCode::PreconditionFailed => Some("Precondition Failed"),
StatusCode::RequestEntityTooLarge => Some("Request Entity Too Large"),
StatusCode::RequestUriTooLong => Some("Request-URI Too Long"),
StatusCode::UnsupportedMediaType => Some("Unsupported Media Type"),
StatusCode::RequestedRangeNotSatisfiable => Some("Requested Range Not Satisfiable"),
StatusCode::ExpectationFailed => Some("Expectation Failed"),
StatusCode::ImATeapot => Some("I'm a teapot"),
StatusCode::AuthenticationTimeout => Some("Authentication Timeout"),
StatusCode::Code420 => None,
StatusCode::Code421 => None,
StatusCode::UnprocessableEntity => Some("Unprocessable Entity"),
StatusCode::Locked => Some("Locked"),
StatusCode::FailedDependency => Some("Failed Dependency"),
StatusCode::UnorderedCollection => Some("Unordered Collection"),
StatusCode::UpgradeRequired => Some("Upgrade Required"),
StatusCode::Code427 => None,
StatusCode::PreconditionRequired => Some("Precondition Required"),
StatusCode::TooManyRequests => Some("Too Many Requests"),
StatusCode::Code430 => None,
StatusCode::RequestHeaderFieldsTooLarge => Some("Request Header Fields Too Large"),
StatusCode::Code432 => None,
StatusCode::Code433 => None,
StatusCode::Code434 => None,
StatusCode::Code435 => None,
StatusCode::Code436 => None,
StatusCode::Code437 => None,
StatusCode::Code438 => None,
StatusCode::Code439 => None,
StatusCode::Code440 => None,
StatusCode::Code441 => None,
StatusCode::Code442 => None,
StatusCode::Code443 => None,
StatusCode::Code444 => None,
StatusCode::Code445 => None,
StatusCode::Code446 => None,
StatusCode::Code447 => None,
StatusCode::Code448 => None,
StatusCode::Code449 => None,
StatusCode::Code450 => None,
StatusCode::UnavailableForLegalReasons => Some("Unavailable For Legal Reasons"),
StatusCode::Code452 => None,
StatusCode::Code453 => None,
StatusCode::Code454 => None,
StatusCode::Code455 => None,
StatusCode::Code456 => None,
StatusCode::Code457 => None,
StatusCode::Code458 => None,
StatusCode::Code459 => None,
StatusCode::Code460 => None,
StatusCode::Code461 => None,
StatusCode::Code462 => None,
StatusCode::Code463 => None,
StatusCode::Code464 => None,
StatusCode::Code465 => None,
StatusCode::Code466 => None,
StatusCode::Code467 => None,
StatusCode::Code468 => None,
StatusCode::Code469 => None,
StatusCode::Code470 => None,
StatusCode::Code471 => None,
StatusCode::Code472 => None,
StatusCode::Code473 => None,
StatusCode::Code474 => None,
StatusCode::Code475 => None,
StatusCode::Code476 => None,
StatusCode::Code477 => None,
StatusCode::Code478 => None,
StatusCode::Code479 => None,
StatusCode::Code480 => None,
StatusCode::Code481 => None,
StatusCode::Code482 => None,
StatusCode::Code483 => None,
StatusCode::Code484 => None,
StatusCode::Code485 => None,
StatusCode::Code486 => None,
StatusCode::Code487 => None,
StatusCode::Code488 => None,
StatusCode::Code489 => None,
StatusCode::Code490 => None,
StatusCode::Code491 => None,
StatusCode::Code492 => None,
StatusCode::Code493 => None,
StatusCode::Code494 => None,
StatusCode::Code495 => None,
StatusCode::Code496 => None,
StatusCode::Code497 => None,
StatusCode::Code498 => None,
StatusCode::Code499 => None,
StatusCode::InternalServerError => Some("Internal Server Error"),
StatusCode::NotImplemented => Some("Not Implemented"),
StatusCode::BadGateway => Some("Bad Gateway"),
StatusCode::ServiceUnavailable => Some("Service Unavailable"),
StatusCode::GatewayTimeout => Some("Gateway Timeout"),
StatusCode::HttpVersionNotSupported => Some("HTTP Version Not Supported"),
StatusCode::VariantAlsoNegotiates => Some("Variant Also Negotiates"),
StatusCode::InsufficientStorage => Some("Insufficient Storage"),
StatusCode::LoopDetected => Some("Loop Detected"),
StatusCode::Code509 => None,
StatusCode::NotExtended => Some("Not Extended"),
StatusCode::NetworkAuthenticationRequired => Some("Network Authentication Required"),
StatusCode::Code512 => None,
StatusCode::Code513 => None,
StatusCode::Code514 => None,
StatusCode::Code515 => None,
StatusCode::Code516 => None,
StatusCode::Code517 => None,
StatusCode::Code518 => None,
StatusCode::Code519 => None,
StatusCode::Code520 => None,
StatusCode::Code521 => None,
StatusCode::Code522 => None,
StatusCode::Code523 => None,
StatusCode::Code524 => None,
StatusCode::Code525 => None,
StatusCode::Code526 => None,
StatusCode::Code527 => None,
StatusCode::Code528 => None,
StatusCode::Code529 => None,
StatusCode::Code530 => None,
StatusCode::Code531 => None,
StatusCode::Code532 => None,
StatusCode::Code533 => None,
StatusCode::Code534 => None,
StatusCode::Code535 => None,
StatusCode::Code536 => None,
StatusCode::Code537 => None,
StatusCode::Code538 => None,
StatusCode::Code539 => None,
StatusCode::Code540 => None,
StatusCode::Code541 => None,
StatusCode::Code542 => None,
StatusCode::Code543 => None,
StatusCode::Code544 => None,
StatusCode::Code545 => None,
StatusCode::Code546 => None,
StatusCode::Code547 => None,
StatusCode::Code548 => None,
StatusCode::Code549 => None,
StatusCode::Code550 => None,
StatusCode::Code551 => None,
StatusCode::Code552 => None,
StatusCode::Code553 => None,
StatusCode::Code554 => None,
StatusCode::Code555 => None,
StatusCode::Code556 => None,
StatusCode::Code557 => None,
StatusCode::Code558 => None,
StatusCode::Code559 => None,
StatusCode::Code560 => None,
StatusCode::Code561 => None,
StatusCode::Code562 => None,
StatusCode::Code563 => None,
StatusCode::Code564 => None,
StatusCode::Code565 => None,
StatusCode::Code566 => None,
StatusCode::Code567 => None,
StatusCode::Code568 => None,
StatusCode::Code569 => None,
StatusCode::Code570 => None,
StatusCode::Code571 => None,
StatusCode::Code572 => None,
StatusCode::Code573 => None,
StatusCode::Code574 => None,
StatusCode::Code575 => None,
StatusCode::Code576 => None,
StatusCode::Code577 => None,
StatusCode::Code578 => None,
StatusCode::Code579 => None,
StatusCode::Code580 => None,
StatusCode::Code581 => None,
StatusCode::Code582 => None,
StatusCode::Code583 => None,
StatusCode::Code584 => None,
StatusCode::Code585 => None,
StatusCode::Code586 => None,
StatusCode::Code587 => None,
StatusCode::Code588 => None,
StatusCode::Code589 => None,
StatusCode::Code590 => None,
StatusCode::Code591 => None,
StatusCode::Code592 => None,
StatusCode::Code593 => None,
StatusCode::Code594 => None,
StatusCode::Code595 => None,
StatusCode::Code596 => None,
StatusCode::Code597 => None,
StatusCode::Code598 => None,
StatusCode::Code599 => None,
}
}
/// Determine the class of a status code, based on its first digit.
pub fn class(&self) -> StatusClass {
let code = *self as u16; // Range of possible values: 100..599.
// We could match 100..199 &c., but this way we avoid unreachable!() at the end.
if code < 200 {
StatusClass::Informational
} else if code < 300 {
StatusClass::Success
} else if code < 400 {
StatusClass::Redirection
} else if code < 500 {
StatusClass::ClientError
} else {
StatusClass::ServerError
}
}
}
impl Copy for StatusCode {}
/// Formats the status code, *including* the canonical reason.
///
/// ```rust
/// # use hyper::status::StatusCode::{ImATeapot, Code123};
/// # #[allow(unstable)]
/// # fn main() {
/// assert_eq!(&format!("{}", ImATeapot)[],
/// "418 I'm a teapot");
/// assert_eq!(&format!("{}", Code123)[],
/// "123 <unknown status code>");
/// # }
/// ```
///
/// If you wish to just include the number, cast to a u16 instead.
impl fmt::String for StatusCode {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{} {}", *self as u16,
self.canonical_reason().unwrap_or("<unknown status code>"))
}
}
// Specified manually because the codegen for derived is slow (at the time of writing on the machine
// of writing, 1.2 seconds) and verbose (though the optimiser cuts it down to size).
impl PartialEq for StatusCode {
#[inline]
fn eq(&self, other: &StatusCode) -> bool {
*self as u16 == *other as u16
}
}
impl Eq for StatusCode {}
// Ditto (though #[derive(Clone)] only takes about 0.4 seconds).
impl Clone for StatusCode {
#[inline]
fn clone(&self) -> StatusCode {
*self
}
}
// Of the other common derivable traits, I didnt measure them, but I guess they would be slow too.
impl FromPrimitive for StatusCode {
fn from_i64(n: i64) -> Option<StatusCode> {
if n < 100 || n > 599 {
None
} else {
Some(unsafe { transmute::<u16, StatusCode>(n as u16) })
}
}
fn from_u64(n: u64) -> Option<StatusCode> {
if n < 100 || n > 599 {
None
} else {
Some(unsafe { transmute::<u16, StatusCode>(n as u16) })
}
}
}
impl PartialOrd for StatusCode {
#[inline]
fn partial_cmp(&self, other: &StatusCode) -> Option<Ordering> {
(*self as u16).partial_cmp(&(*other as u16))
}
}
impl Ord for StatusCode {
#[inline]
fn cmp(&self, other: &StatusCode) -> Ordering {
if *self < *other {
Less
} else if *self > *other {
Greater
} else {
Equal
}
}
}
impl ToPrimitive for StatusCode {
fn to_i64(&self) -> Option<i64> {
Some(*self as i64)
}
fn to_u64(&self) -> Option<u64> {
Some(*self as u64)
}
}
/// The class of an HTTP `Status-Code`.
///
/// [RFC 2616, section 6.1.1 (Status Code and Reason
/// Phrase)](https://tools.ietf.org/html/rfc2616#section-6.1.1):
///
/// > The first digit of the Status-Code defines the class of response. The
/// > last two digits do not have any categorization role.
/// >
/// > ...
/// >
/// > HTTP status codes are extensible. HTTP applications are not required
/// > to understand the meaning of all registered status codes, though such
/// > understanding is obviously desirable. However, applications MUST
/// > understand the class of any status code, as indicated by the first
/// > digit, and treat any unrecognized response as being equivalent to the
/// > x00 status code of that class, with the exception that an
/// > unrecognized response MUST NOT be cached. For example, if an
/// > unrecognized status code of 431 is received by the client, it can
/// > safely assume that there was something wrong with its request and
/// > treat the response as if it had received a 400 status code. In such
/// > cases, user agents SHOULD present to the user the entity returned
/// > with the response, since that entity is likely to include human-
/// > readable information which will explain the unusual status.
///
/// This can be used in cases where a status codes meaning is unknown, also,
/// to get the appropriate *category* of status.
///
/// For HTTP/2.0, the 1xx Informational class is invalid.
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Copy)]
pub enum StatusClass {
/// 1xx: Informational - Request received, continuing process
Informational = 100,
/// 2xx: Success - The action was successfully received, understood, and accepted
Success = 200,
/// 3xx: Redirection - Further action must be taken in order to complete the request
Redirection = 300,
/// 4xx: Client Error - The request contains bad syntax or cannot be fulfilled
ClientError = 400,
/// 5xx: Server Error - The server failed to fulfill an apparently valid request
ServerError = 500,
}
impl StatusClass {
/// Get the default status code for the class.
///
/// This produces the x00 status code; thus, for `ClientError` (4xx), for example, this will
/// produce `BadRequest` (400):
///
/// ```rust
/// # use hyper::status::StatusClass::ClientError;
/// # use hyper::status::StatusCode::BadRequest;
/// assert_eq!(ClientError.default_code(), BadRequest);
/// ```
///
/// The use for this is outlined in [RFC 2616, section 6.1.1 (Status Code and Reason
/// Phrase)](https://tools.ietf.org/html/rfc2616#section-6.1.1):
///
/// > HTTP status codes are extensible. HTTP applications are not required
/// > to understand the meaning of all registered status codes, though such
/// > understanding is obviously desirable. However, applications MUST
/// > understand the class of any status code, as indicated by the first
/// > digit, and treat any unrecognized response as being equivalent to the
/// > x00 status code of that class, with the exception that an
/// > unrecognized response MUST NOT be cached. For example, if an
/// > unrecognized status code of 431 is received by the client, it can
/// > safely assume that there was something wrong with its request and
/// > treat the response as if it had received a 400 status code. In such
/// > cases, user agents SHOULD present to the user the entity returned
/// > with the response, since that entity is likely to include human-
/// > readable information which will explain the unusual status.
///
/// This is demonstrated thusly (Ill use 432 rather than 431 as 431 *is* now in use):
///
/// ```rust
/// # use hyper::status::StatusCode::{Code432, BadRequest};
/// // Suppose we have received this status code.
/// let status = Code432;
///
/// // Uh oh! Dont know what to do with it.
/// // Lets fall back to the default:
/// let status = status.class().default_code();
///
/// // And look! That is 400 Bad Request.
/// assert_eq!(status, BadRequest);
/// // So now lets treat it as that.
/// ```
#[inline]
pub fn default_code(&self) -> StatusCode {
unsafe { transmute::<StatusClass, StatusCode>(*self) }
}
}
impl ToPrimitive for StatusClass {
fn to_i64(&self) -> Option<i64> {
Some(*self as i64)
}
fn to_u64(&self) -> Option<u64> {
Some(*self as u64)
}
}