Skip to content

Commit e3accd5

Browse files
committed
Update types on partial request methods
1 parent 179e3c3 commit e3accd5

File tree

3 files changed

+33
-37
lines changed

3 files changed

+33
-37
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ use http_message::PartialHttpRequest;
88
fn main() {
99
let partial = PartialHttpRequest::from_str("GET https://example.com\nx-key: 123").unwrap();
1010

11-
assert_eq!(Some(0..3), partial.method_span());
11+
assert_eq!(&Some(0..3), partial.method_span());
1212
assert_eq!(Some("GET"), partial.method_str());
1313

14-
assert_eq!(Some(4..23), partial.uri_span());
14+
assert_eq!(&Some(4..23), partial.uri_span());
1515
assert_eq!(Some("https://example.com"), partial.uri_str());
1616

17-
assert_eq!(None, partial.http_version_span());
17+
assert_eq!(&None, partial.http_version_span());
1818
assert_eq!(None, partial.http_version_str());
1919

20-
assert_eq!(Some(24..34), partial.header_span("x-key"));
20+
assert_eq!(Some(&(24..34)), partial.header_span("x-key"));
2121
assert_eq!(Some("x-key: 123"), partial.header_str("x-key"));
2222
}
2323
```

examples/main.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ use http_message::PartialHttpRequest;
55
fn main() {
66
let partial = PartialHttpRequest::from_str("GET https://example.com\nx-key: 123").unwrap();
77

8-
assert_eq!(Some(0..3), partial.method_span());
8+
assert_eq!(&Some(0..3), partial.method_span());
99
assert_eq!(Some("GET"), partial.method_str());
1010

11-
assert_eq!(Some(4..23), partial.uri_span());
11+
assert_eq!(&Some(4..23), partial.uri_span());
1212
assert_eq!(Some("https://example.com"), partial.uri_str());
1313

14-
assert_eq!(None, partial.http_version_span());
14+
assert_eq!(&None, partial.http_version_span());
1515
assert_eq!(None, partial.http_version_str());
1616

17-
assert_eq!(Some(24..34), partial.header_span("x-key"));
17+
assert_eq!(Some(&(24..34)), partial.header_span("x-key"));
1818
assert_eq!(Some("x-key: 123"), partial.header_str("x-key"));
1919
}

src/models/partial_request.rs

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
use core::fmt;
22
use std::{ops::Range, str::FromStr};
33

4-
use crate::{error::Error, span::get_line_spans};
4+
use crate::{
5+
error::Error,
6+
span::{Span, get_line_spans},
7+
};
58

69
/// A partial HTTP request that might not conform to HTTP spec
710
///
@@ -45,66 +48,59 @@ impl PartialHttpRequest {
4548
&self.message
4649
}
4750

48-
pub fn uri_span(&self) -> Option<Range<usize>> {
49-
self.uri.clone()
51+
fn slice_message(&self, span: &Span) -> &str {
52+
&self.message[span.clone()]
53+
}
54+
55+
pub fn uri_span(&self) -> &Option<Range<usize>> {
56+
&self.uri
5057
}
5158

5259
pub fn uri_str(&self) -> Option<&str> {
53-
self.uri
54-
.as_ref()
55-
.map(|span| &self.message[span.start..span.end])
60+
self.uri.as_ref().map(|span| self.slice_message(span))
5661
}
5762

58-
pub fn method_span(&self) -> Option<Range<usize>> {
59-
self.method.clone()
63+
pub fn method_span(&self) -> &Option<Range<usize>> {
64+
&self.method
6065
}
6166

6267
pub fn method_str(&self) -> Option<&str> {
63-
self.method
64-
.as_ref()
65-
.map(|span| &self.message[span.start..span.end])
68+
self.method.as_ref().map(|span| self.slice_message(span))
6669
}
6770

68-
pub fn http_version_span(&self) -> Option<Range<usize>> {
69-
self.http_version.clone()
71+
pub fn http_version_span(&self) -> &Option<Range<usize>> {
72+
&self.http_version
7073
}
7174

7275
pub fn http_version_str(&self) -> Option<&str> {
7376
self.http_version
7477
.as_ref()
75-
.map(|span| &self.message[span.start..span.end])
78+
.map(|span| self.slice_message(span))
7679
}
7780

78-
pub fn header_spans(&self) -> Vec<Range<usize>> {
79-
self.headers.clone()
81+
pub fn header_spans(&self) -> &Vec<Range<usize>> {
82+
&self.headers
8083
}
8184

8285
pub fn header_strs(&self) -> Vec<&str> {
8386
self.headers
8487
.iter()
85-
.map(|span| &self.message[span.start..span.end])
88+
.map(|span| self.slice_message(span))
8689
.collect()
8790
}
8891

89-
pub fn header_span(&self, key: &str) -> Option<Range<usize>> {
92+
pub fn header_span(&self, key: &str) -> Option<&Range<usize>> {
9093
self.headers
91-
.clone()
92-
.into_iter()
93-
.find(|span| self.message[span.start..span.end].starts_with(&format!("{key}:")))
94+
.iter()
95+
.find(|span| self.slice_message(span).starts_with(&format!("{key}:")))
9496
}
9597

9698
pub fn header_str(&self, key: &str) -> Option<&str> {
97-
self.headers
98-
.clone()
99-
.into_iter()
100-
.find(|span| self.message[span.start..span.end].starts_with(&format!("{key}:")))
101-
.map(|span| &self.message[span.start..span.end])
99+
self.header_span(key).map(|span| self.slice_message(span))
102100
}
103101

104102
pub fn body_str(&self) -> Option<&str> {
105-
self.body
106-
.as_ref()
107-
.map(|body| &self.message[body.start..body.end])
103+
self.body.as_ref().map(|span| &self.message[span.clone()])
108104
}
109105
}
110106

0 commit comments

Comments
 (0)