diff options
| author | Fuwn <[email protected]> | 2025-09-11 06:24:53 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-09-11 06:24:53 +0000 |
| commit | 6e7600e9b3ced49f8f274fbfdffe8bbf39eabd8e (patch) | |
| tree | ff195761d8b43bcc6318e26a3d56a918ec561732 /src | |
| parent | fix(markdown): Optimise Markdown conversion (diff) | |
| download | germ-6e7600e9b3ced49f8f274fbfdffe8bbf39eabd8e.tar.xz germ-6e7600e9b3ced49f8f274fbfdffe8bbf39eabd8e.zip | |
refactor: Optimise allocations and string operations
Diffstat (limited to 'src')
| -rw-r--r-- | src/meta.rs | 33 | ||||
| -rw-r--r-- | src/request/response.rs | 9 |
2 files changed, 23 insertions, 19 deletions
diff --git a/src/meta.rs b/src/meta.rs index 453bbb6..9ec1a89 100644 --- a/src/meta.rs +++ b/src/meta.rs @@ -30,22 +30,25 @@ pub struct Meta { impl Display for Meta { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}{}", self.mime, { - let mut parameters = self - .parameters - .iter() - .map(|(k, v)| format!("{}={}", *k, v)) - .collect::<Vec<_>>(); - - parameters.sort(); - parameters.reverse(); - - if parameters.is_empty() { - String::new() - } else { - format!("; {}", parameters.join("; ")) + write!(f, "{}", self.mime)?; + + if !self.parameters.is_empty() { + write!(f, "; ")?; + + let mut parameters: Vec<_> = self.parameters.iter().collect(); + + parameters.sort_by(|a, b| a.0.cmp(b.0)); + + for (i, (key, value)) in parameters.iter().enumerate() { + if i > 0 { + write!(f, "; ")?; + } + + write!(f, "{key}={value}")?; } - }) + } + + Ok(()) } } diff --git a/src/request/response.rs b/src/request/response.rs index a594b6e..0e4877f 100644 --- a/src/request/response.rs +++ b/src/request/response.rs @@ -35,16 +35,17 @@ impl Response { .position(|window| window == delimiter) .map_or(data.len(), |pos| pos + delimiter.len()); let header_bytes = &data[..header_end]; - let header = String::from_utf8_lossy(header_bytes).trim_end().to_string(); + let header_cow = String::from_utf8_lossy(header_bytes); + let header_trimmed = header_cow.trim_end(); let content_bytes = if header_end < data.len() { Some(data[header_end..].to_vec()) } else { None }; - let (status_string, meta_string) = if header.len() >= 2 { - header.split_at(2) + let (status_string, meta_string) = if header_trimmed.len() >= 2 { + header_trimmed.split_at(2) } else { - (header.as_str(), "") + (header_trimmed, "") }; let status_code = status_string.parse::<i32>().unwrap_or(0); |