From 7e55506134e9605cf6ce135b1406882a2c0160f0 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Mon, 17 Nov 2014 15:52:49 -0800 Subject: [PATCH] move other header parse utils to util module --- src/header/common/connection.rs | 2 +- src/header/common/mod.rs | 30 ------------------------ src/header/common/transfer_encoding.rs | 2 +- src/header/common/upgrade.rs | 2 +- src/header/common/util.rs | 32 +++++++++++++++++++++++++- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/header/common/connection.rs b/src/header/common/connection.rs index 3245dab6..f58cb4fc 100644 --- a/src/header/common/connection.rs +++ b/src/header/common/connection.rs @@ -1,7 +1,7 @@ use header::{Header, HeaderFormat}; use std::fmt::{mod, Show}; -use super::{from_comma_delimited, fmt_comma_delimited}; use std::str::FromStr; +use super::util::{from_comma_delimited, fmt_comma_delimited}; /// The `Connection` header. #[deriving(Clone, PartialEq, Show)] diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index 5d6f00c6..c910a170 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -21,9 +21,6 @@ pub use self::user_agent::UserAgent; pub use self::server::Server; pub use self::set_cookie::SetCookie; -use std::fmt::{mod, Show}; -use std::str::{FromStr, from_utf8}; - macro_rules! bench_header( ($name:ident, $ty:ty, $value:expr) => { #[cfg(test)] @@ -105,30 +102,3 @@ pub mod upgrade; pub mod user_agent; pub mod util; - -fn from_comma_delimited(raw: &[Vec]) -> Option> { - if raw.len() != 1 { - return None; - } - // we JUST checked that raw.len() == 1, so raw[0] WILL exist. - match from_utf8(unsafe { raw.as_slice().unsafe_get(0).as_slice() }) { - Some(s) => { - Some(s.as_slice() - .split([',', ' '].as_slice()) - .filter_map(from_str) - .collect()) - } - None => None - } -} - -fn fmt_comma_delimited(fmt: &mut fmt::Formatter, parts: &[T]) -> fmt::Result { - let last = parts.len() - 1; - for (i, part) in parts.iter().enumerate() { - try!(part.fmt(fmt)); - if i < last { - try!(", ".fmt(fmt)); - } - } - Ok(()) -} diff --git a/src/header/common/transfer_encoding.rs b/src/header/common/transfer_encoding.rs index d5e83792..ea6ff7a0 100644 --- a/src/header/common/transfer_encoding.rs +++ b/src/header/common/transfer_encoding.rs @@ -1,7 +1,7 @@ use header::{Header, HeaderFormat}; use std::fmt; use std::str::FromStr; -use super::{from_comma_delimited, fmt_comma_delimited}; +use super::util::{from_comma_delimited, fmt_comma_delimited}; /// The `Transfer-Encoding` header. /// diff --git a/src/header/common/upgrade.rs b/src/header/common/upgrade.rs index ba96a2f7..55f5f850 100644 --- a/src/header/common/upgrade.rs +++ b/src/header/common/upgrade.rs @@ -1,7 +1,7 @@ use header::{Header, HeaderFormat}; use std::fmt::{mod, Show}; -use super::{from_comma_delimited, fmt_comma_delimited}; use std::str::FromStr; +use super::util::{from_comma_delimited, fmt_comma_delimited}; /// The `Upgrade` header. #[deriving(Clone, PartialEq, Show)] diff --git a/src/header/common/util.rs b/src/header/common/util.rs index e17de12a..a6063975 100644 --- a/src/header/common/util.rs +++ b/src/header/common/util.rs @@ -1,8 +1,9 @@ //! Utility functions for Header implementations. use std::str::{FromStr, from_utf8}; +use std::fmt::{mod, Show}; -/// Utility function that reads a single raw string when parsing a header +/// Reads a single raw string when parsing a header pub fn from_one_raw_str(raw: &[Vec]) -> Option { if raw.len() != 1 { return None; @@ -13,3 +14,32 @@ pub fn from_one_raw_str(raw: &[Vec]) -> Option { None => None } } + +/// Reads a comma-delimited raw string into a Vec. +pub fn from_comma_delimited(raw: &[Vec]) -> Option> { + if raw.len() != 1 { + return None; + } + // we JUST checked that raw.len() == 1, so raw[0] WILL exist. + match from_utf8(unsafe { raw.as_slice().unsafe_get(0).as_slice() }) { + Some(s) => { + Some(s.as_slice() + .split([',', ' '].as_slice()) + .filter_map(from_str) + .collect()) + } + None => None + } +} + +/// Format an array into a comma-delimited string. +pub fn fmt_comma_delimited(fmt: &mut fmt::Formatter, parts: &[T]) -> fmt::Result { + let last = parts.len() - 1; + for (i, part) in parts.iter().enumerate() { + try!(part.fmt(fmt)); + if i < last { + try!(", ".fmt(fmt)); + } + } + Ok(()) +}