diff --git a/src/libhttp/codegen/codegen.rs b/src/libhttp/codegen/codegen.rs index 8cb3a59..eb327e8 100644 --- a/src/libhttp/codegen/codegen.rs +++ b/src/libhttp/codegen/codegen.rs @@ -1,3 +1,4 @@ +#[feature(macro_rules)]; use std::io::{file_writer, Create, Truncate}; use std::os; diff --git a/src/libhttp/codegen/status.rs b/src/libhttp/codegen/status.rs index e806cc0..0288ca3 100644 --- a/src/libhttp/codegen/status.rs +++ b/src/libhttp/codegen/status.rs @@ -157,7 +157,6 @@ pub fn generate(output_dir: &Path) { out.write_str("// This file is automatically generated file is used as http::status. use std::fmt; -use std::num::IntConvertible; use std::ascii::StrAsciiExt; /// HTTP status code @@ -254,19 +253,44 @@ impl fmt::Unsigned for Status { } -impl IntConvertible for Status { +impl ToPrimitive for Status { /// Equivalent to `self.code()` - fn to_int(&self) -> int { - self.code() as int + fn to_i64(&self) -> Option { + Some(self.code() as i64) } +} + +impl FromPrimitive for Status { /// Get a *registered* status code from the number of its status code. /// /// This will fail if an unknown code is passed. /// /// For example, `from_int(200)` will return `OK`. - fn from_int(n: int) -> Status { + fn from_i64(n: i64) -> Option { + match n { +"); + let mut matched_numbers = HashSet::new(); + for &entry in entries.iter() { + match entry { + Left(heading) => out.write_str(format!("\n // {}\n", heading)), + Right(status) => { + if !matched_numbers.contains(&status.code) { + // Purpose: FailedDependency and MethodFailure both use 424, + // but clearly they mustn't both go in here + out.write_str(format!(" {:u} => Some({}),\n", status.code, status.ident())); + matched_numbers.insert(status.code); + } + }, + } + } + out.write_str(" + _ => { fail!(format!(\"No registered HTTP status code {}\", n)); } + } + } + + fn from_u64(n: u64) -> Option { match n { "); let mut matched_numbers = HashSet::new(); @@ -277,7 +301,7 @@ impl IntConvertible for Status { if !matched_numbers.contains(&status.code) { // Purpose: FailedDependency and MethodFailure both use 424, // but clearly they mustn't both go in here - out.write_str(format!(" {:u} => {},\n", status.code, status.ident())); + out.write_str(format!(" {:u} => Some({}),\n", status.code, status.ident())); matched_numbers.insert(status.code); } }, diff --git a/src/libhttp/lib.rs b/src/libhttp/lib.rs index 2f26694..6905088 100644 --- a/src/libhttp/lib.rs +++ b/src/libhttp/lib.rs @@ -1,3 +1,4 @@ +#[feature(macro_rules)]; #[link(name = "http", vers = "0.1-pre", uuid = "d2ad8df0-547a-4ce1-99c6-a9da3b98fb3e", @@ -11,6 +12,7 @@ //#[deny(missing_doc)]; #[macro_escape]; +#[feature(globs)]; extern mod extra;