use std::fmt;
use std::mem::transmute;
pub enum StatusCode {
Continue = 100,
SwitchingProtocols = 101,
Processing = 102,
Code103 = 103,
Code104 = 104,
Code105 = 105,
Code106 = 106,
Code107 = 107,
Code108 = 108,
Code109 = 109,
Code110 = 110,
Code111 = 111,
Code112 = 112,
Code113 = 113,
Code114 = 114,
Code115 = 115,
Code116 = 116,
Code117 = 117,
Code118 = 118,
Code119 = 119,
Code120 = 120,
Code121 = 121,
Code122 = 122,
Code123 = 123,
Code124 = 124,
Code125 = 125,
Code126 = 126,
Code127 = 127,
Code128 = 128,
Code129 = 129,
Code130 = 130,
Code131 = 131,
Code132 = 132,
Code133 = 133,
Code134 = 134,
Code135 = 135,
Code136 = 136,
Code137 = 137,
Code138 = 138,
Code139 = 139,
Code140 = 140,
Code141 = 141,
Code142 = 142,
Code143 = 143,
Code144 = 144,
Code145 = 145,
Code146 = 146,
Code147 = 147,
Code148 = 148,
Code149 = 149,
Code150 = 150,
Code151 = 151,
Code152 = 152,
Code153 = 153,
Code154 = 154,
Code155 = 155,
Code156 = 156,
Code157 = 157,
Code158 = 158,
Code159 = 159,
Code160 = 160,
Code161 = 161,
Code162 = 162,
Code163 = 163,
Code164 = 164,
Code165 = 165,
Code166 = 166,
Code167 = 167,
Code168 = 168,
Code169 = 169,
Code170 = 170,
Code171 = 171,
Code172 = 172,
Code173 = 173,
Code174 = 174,
Code175 = 175,
Code176 = 176,
Code177 = 177,
Code178 = 178,
Code179 = 179,
Code180 = 180,
Code181 = 181,
Code182 = 182,
Code183 = 183,
Code184 = 184,
Code185 = 185,
Code186 = 186,
Code187 = 187,
Code188 = 188,
Code189 = 189,
Code190 = 190,
Code191 = 191,
Code192 = 192,
Code193 = 193,
Code194 = 194,
Code195 = 195,
Code196 = 196,
Code197 = 197,
Code198 = 198,
Code199 = 199,
Ok = 200,
Created = 201,
Accepted = 202,
NonAuthoritativeInformation = 203,
NoContent = 204,
ResetContent = 205,
PartialContent = 206,
MultiStatus = 207,
AlreadyReported = 208,
Code209 = 209,
Code210 = 210,
Code211 = 211,
Code212 = 212,
Code213 = 213,
Code214 = 214,
Code215 = 215,
Code216 = 216,
Code217 = 217,
Code218 = 218,
Code219 = 219,
Code220 = 220,
Code221 = 221,
Code222 = 222,
Code223 = 223,
Code224 = 224,
Code225 = 225,
ImUsed = 226,
Code227 = 227,
Code228 = 228,
Code229 = 229,
Code230 = 230,
Code231 = 231,
Code232 = 232,
Code233 = 233,
Code234 = 234,
Code235 = 235,
Code236 = 236,
Code237 = 237,
Code238 = 238,
Code239 = 239,
Code240 = 240,
Code241 = 241,
Code242 = 242,
Code243 = 243,
Code244 = 244,
Code245 = 245,
Code246 = 246,
Code247 = 247,
Code248 = 248,
Code249 = 249,
Code250 = 250,
Code251 = 251,
Code252 = 252,
Code253 = 253,
Code254 = 254,
Code255 = 255,
Code256 = 256,
Code257 = 257,
Code258 = 258,
Code259 = 259,
Code260 = 260,
Code261 = 261,
Code262 = 262,
Code263 = 263,
Code264 = 264,
Code265 = 265,
Code266 = 266,
Code267 = 267,
Code268 = 268,
Code269 = 269,
Code270 = 270,
Code271 = 271,
Code272 = 272,
Code273 = 273,
Code274 = 274,
Code275 = 275,
Code276 = 276,
Code277 = 277,
Code278 = 278,
Code279 = 279,
Code280 = 280,
Code281 = 281,
Code282 = 282,
Code283 = 283,
Code284 = 284,
Code285 = 285,
Code286 = 286,
Code287 = 287,
Code288 = 288,
Code289 = 289,
Code290 = 290,
Code291 = 291,
Code292 = 292,
Code293 = 293,
Code294 = 294,
Code295 = 295,
Code296 = 296,
Code297 = 297,
Code298 = 298,
Code299 = 299,
MultipleChoices = 300,
MovedPermanently = 301,
Found = 302,
SeeOther = 303,
NotModified = 304,
UseProxy = 305,
SwitchProxy = 306,
TemporaryRedirect = 307,
PermanentRedirect = 308,
Code309 = 309,
Code310 = 310,
Code311 = 311,
Code312 = 312,
Code313 = 313,
Code314 = 314,
Code315 = 315,
Code316 = 316,
Code317 = 317,
Code318 = 318,
Code319 = 319,
Code320 = 320,
Code321 = 321,
Code322 = 322,
Code323 = 323,
Code324 = 324,
Code325 = 325,
Code326 = 326,
Code327 = 327,
Code328 = 328,
Code329 = 329,
Code330 = 330,
Code331 = 331,
Code332 = 332,
Code333 = 333,
Code334 = 334,
Code335 = 335,
Code336 = 336,
Code337 = 337,
Code338 = 338,
Code339 = 339,
Code340 = 340,
Code341 = 341,
Code342 = 342,
Code343 = 343,
Code344 = 344,
Code345 = 345,
Code346 = 346,
Code347 = 347,
Code348 = 348,
Code349 = 349,
Code350 = 350,
Code351 = 351,
Code352 = 352,
Code353 = 353,
Code354 = 354,
Code355 = 355,
Code356 = 356,
Code357 = 357,
Code358 = 358,
Code359 = 359,
Code360 = 360,
Code361 = 361,
Code362 = 362,
Code363 = 363,
Code364 = 364,
Code365 = 365,
Code366 = 366,
Code367 = 367,
Code368 = 368,
Code369 = 369,
Code370 = 370,
Code371 = 371,
Code372 = 372,
Code373 = 373,
Code374 = 374,
Code375 = 375,
Code376 = 376,
Code377 = 377,
Code378 = 378,
Code379 = 379,
Code380 = 380,
Code381 = 381,
Code382 = 382,
Code383 = 383,
Code384 = 384,
Code385 = 385,
Code386 = 386,
Code387 = 387,
Code388 = 388,
Code389 = 389,
Code390 = 390,
Code391 = 391,
Code392 = 392,
Code393 = 393,
Code394 = 394,
Code395 = 395,
Code396 = 396,
Code397 = 397,
Code398 = 398,
Code399 = 399,
BadRequest = 400,
Unauthorized = 401,
PaymentRequired = 402,
Forbidden = 403,
NotFound = 404,
MethodNotAllowed = 405,
NotAcceptable = 406,
ProxyAuthenticationRequired = 407,
RequestTimeout = 408,
Conflict = 409,
Gone = 410,
LengthRequired = 411,
PreconditionFailed = 412,
RequestEntityTooLarge = 413,
RequestUriTooLong = 414,
UnsupportedMediaType = 415,
RequestedRangeNotSatisfiable = 416,
ExpectationFailed = 417,
ImATeapot = 418,
AuthenticationTimeout = 419,
Code420 = 420,
Code421 = 421,
UnprocessableEntity = 422,
Locked = 423,
FailedDependency = 424,
UnorderedCollection = 425,
UpgradeRequired = 426,
Code427 = 427,
PreconditionRequired = 428,
TooManyRequests = 429,
Code430 = 430,
RequestHeaderFieldsTooLarge = 431,
Code432 = 432,
Code433 = 433,
Code434 = 434,
Code435 = 435,
Code436 = 436,
Code437 = 437,
Code438 = 438,
Code439 = 439,
Code440 = 440,
Code441 = 441,
Code442 = 442,
Code443 = 443,
Code444 = 444,
Code445 = 445,
Code446 = 446,
Code447 = 447,
Code448 = 448,
Code449 = 449,
Code450 = 450,
UnavailableForLegalReasons = 451,
Code452 = 452,
Code453 = 453,
Code454 = 454,
Code455 = 455,
Code456 = 456,
Code457 = 457,
Code458 = 458,
Code459 = 459,
Code460 = 460,
Code461 = 461,
Code462 = 462,
Code463 = 463,
Code464 = 464,
Code465 = 465,
Code466 = 466,
Code467 = 467,
Code468 = 468,
Code469 = 469,
Code470 = 470,
Code471 = 471,
Code472 = 472,
Code473 = 473,
Code474 = 474,
Code475 = 475,
Code476 = 476,
Code477 = 477,
Code478 = 478,
Code479 = 479,
Code480 = 480,
Code481 = 481,
Code482 = 482,
Code483 = 483,
Code484 = 484,
Code485 = 485,
Code486 = 486,
Code487 = 487,
Code488 = 488,
Code489 = 489,
Code490 = 490,
Code491 = 491,
Code492 = 492,
Code493 = 493,
Code494 = 494,
Code495 = 495,
Code496 = 496,
Code497 = 497,
Code498 = 498,
Code499 = 499,
InternalServerError = 500,
NotImplemented = 501,
BadGateway = 502,
ServiceUnavailable = 503,
GatewayTimeout = 504,
HttpVersionNotSupported = 505,
VariantAlsoNegotiates = 506,
InsufficientStorage = 507,
LoopDetected = 508,
Code509 = 509,
NotExtended = 510,
NetworkAuthenticationRequired = 511,
Code512 = 512,
Code513 = 513,
Code514 = 514,
Code515 = 515,
Code516 = 516,
Code517 = 517,
Code518 = 518,
Code519 = 519,
Code520 = 520,
Code521 = 521,
Code522 = 522,
Code523 = 523,
Code524 = 524,
Code525 = 525,
Code526 = 526,
Code527 = 527,
Code528 = 528,
Code529 = 529,
Code530 = 530,
Code531 = 531,
Code532 = 532,
Code533 = 533,
Code534 = 534,
Code535 = 535,
Code536 = 536,
Code537 = 537,
Code538 = 538,
Code539 = 539,
Code540 = 540,
Code541 = 541,
Code542 = 542,
Code543 = 543,
Code544 = 544,
Code545 = 545,
Code546 = 546,
Code547 = 547,
Code548 = 548,
Code549 = 549,
Code550 = 550,
Code551 = 551,
Code552 = 552,
Code553 = 553,
Code554 = 554,
Code555 = 555,
Code556 = 556,
Code557 = 557,
Code558 = 558,
Code559 = 559,
Code560 = 560,
Code561 = 561,
Code562 = 562,
Code563 = 563,
Code564 = 564,
Code565 = 565,
Code566 = 566,
Code567 = 567,
Code568 = 568,
Code569 = 569,
Code570 = 570,
Code571 = 571,
Code572 = 572,
Code573 = 573,
Code574 = 574,
Code575 = 575,
Code576 = 576,
Code577 = 577,
Code578 = 578,
Code579 = 579,
Code580 = 580,
Code581 = 581,
Code582 = 582,
Code583 = 583,
Code584 = 584,
Code585 = 585,
Code586 = 586,
Code587 = 587,
Code588 = 588,
Code589 = 589,
Code590 = 590,
Code591 = 591,
Code592 = 592,
Code593 = 593,
Code594 = 594,
Code595 = 595,
Code596 = 596,
Code597 = 597,
Code598 = 598,
Code599 = 599,
}
impl StatusCode {
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,
}
}
pub fn class(&self) -> StatusClass {
let code = *self as u16; 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 {}
impl fmt::Show for StatusCode {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{} {}", *self as u16,
self.canonical_reason().unwrap_or("<unknown status code>"))
}
}
impl PartialEq for StatusCode {
#[inline]
fn eq(&self, other: &StatusCode) -> bool {
*self as u16 == *other as u16
}
}
impl Eq for StatusCode {}
impl Clone for StatusCode {
#[inline]
fn clone(&self) -> StatusCode {
*self
}
}
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)
}
}
#[deriving(Clone, PartialEq, Eq, PartialOrd, Ord, Copy)]
pub enum StatusClass {
Informational = 100,
Success = 200,
Redirection = 300,
ClientError = 400,
ServerError = 500,
}
impl StatusClass {
#[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)
}
}