-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP HeaderValue: make Cow<'static, str> #335
base: main
Are you sure you want to change the base?
Conversation
This allows HeaderValue to borrow `'static` strings, rather than make allocations. Unfortunately, we can't specialize `TryFrom` or `From`, so this also adds a new crate-only `from_static_str() -> HeaderValue`.
@@ -11,7 +12,7 @@ use crate::Mime; | |||
/// A header value. | |||
#[derive(Clone, Eq, PartialEq, Hash)] | |||
pub struct HeaderValue { | |||
inner: String, | |||
inner: Cow<'static, str>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why not pub struct HeaderValue<'a> { inner: Cow<'a, str> }
and just use HeaderValue<'static>
where we need it to be 'static
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jbr That'd make the API a little more awkward to use, and would potentially be a backwards-compatibility issue.
Most header names (and many header values) will be short; we might want to use something like |
trillium's header name implementation does something like this, using smartcow which is just a cow for smartstring. However it might also make sense to use some sort of string interning library because there are only a handful of header names used in reality and they're repeated across requests |
This allows HeaderValue to borrow
'static
strings, rather than make allocations.Unfortunately, we can't specialize
TryFrom
orFrom
, so this also adds a new crate-onlyfrom_static_str() -> HeaderValue
.