aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-09-11 06:24:53 +0000
committerFuwn <[email protected]>2025-09-11 06:24:53 +0000
commit6e7600e9b3ced49f8f274fbfdffe8bbf39eabd8e (patch)
treeff195761d8b43bcc6318e26a3d56a918ec561732
parentfix(markdown): Optimise Markdown conversion (diff)
downloadgerm-6e7600e9b3ced49f8f274fbfdffe8bbf39eabd8e.tar.xz
germ-6e7600e9b3ced49f8f274fbfdffe8bbf39eabd8e.zip
refactor: Optimise allocations and string operations
-rw-r--r--src/meta.rs33
-rw-r--r--src/request/response.rs9
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);