http_wasm_guest/host/
request.rs1use crate::host::{Body, Bytes, Header, handler};
2pub struct Request {
4 pub header: Header,
6 pub body: Body,
8}
9const KIND_REQ: i32 = 0;
10
11impl Request {
12 pub(crate) fn new() -> Self {
14 Self { header: Header::new(KIND_REQ), body: Body::new(KIND_REQ) }
15 }
16
17 pub fn source_addr(&self) -> Bytes {
27 Bytes::from(handler::source_addr())
28 }
29
30 pub fn version(&self) -> Bytes {
32 Bytes::from(handler::version())
33 }
34
35 pub fn method(&self) -> Bytes {
37 Bytes::from(handler::method())
38 }
39
40 pub fn set_method(&self, method: &[u8]) {
42 handler::set_method(method);
43 }
44
45 pub fn uri(&self) -> Bytes {
47 Bytes::from(handler::uri())
48 }
49
50 pub fn set_uri(&self, uri: &[u8]) {
52 handler::set_uri(uri);
53 }
54
55 #[deprecated(since = "0.11.2", note = "use the `header` field directly instead")]
57 pub fn header(&self) -> &Header {
58 &self.header
59 }
60
61 #[deprecated(since = "0.11.2", note = "use the `body` field directly instead")]
63 pub fn body(&self) -> &Body {
64 &self.body
65 }
66}
67
68#[cfg(test)]
69mod tests {
70 use super::*;
71
72 #[test]
73 fn request_method() {
74 let request = Request::new();
75 let method = request.method();
76 assert_eq!(&method, b"GET");
78 }
79
80 #[test]
81 fn request_version() {
82 let request = Request::new();
83 let version = request.version();
84 assert!(!version.is_empty());
86 assert_eq!(version.to_str().unwrap(), "HTTP/2.0");
87 }
88
89 #[test]
90 fn request_uri() {
91 let request = Request::new();
92 let uri = request.uri();
93 assert!(uri.to_str().unwrap().contains("test"));
95 }
96
97 #[test]
98 fn request_source_addr() {
99 let request = Request::new();
100 let addr = request.source_addr();
101 assert_eq!(addr.to_str().unwrap(), "192.168.1.1");
103 }
104
105 #[test]
106 fn request_header_access() {
107 let request = Request::new();
108 let header = request.header;
109 let names: Vec<_> = header.names_iter().collect();
111 assert_eq!(names.len(), 3);
112 }
113
114 #[test]
115 fn request_body_access() {
116 let request = Request::new();
117 let body = request.body;
118 let content = body.read();
119 assert!(content.is_empty());
121 }
122
123 #[test]
124 fn request_set_method() {
125 let request = Request::new();
126 request.set_method(b"POST");
128 }
129
130 #[test]
131 fn request_set_uri() {
132 let request = Request::new();
133 request.set_uri(b"/new/path?query=value");
135 }
136}