欢迎光临散文网 会员登陆 & 注册

[rust] 将合法http字符串切片转换为hyper::Request结构的方法

2023-08-08 22:13 作者:信天鴿  | 我要投稿

/// use to covert **valid** http str to `hyper::Request`
///
/// example
/// ```rust
/// let listener = TcpListener::bind("localhost:8080").unwrap();
///    for stream in listener.incoming() {
///        let mut stream = stream.unwrap();
///        let mut buffer = String::new();
///        stream.read_to_string(&mut buffer).unwrap();
///        let req = covert_str_to_request(buffer.as_str());
///        println!("{req:#?}");
///    }
/// ```
fn covert_str_to_request(s: &str) -> hyper::Request<Option<&str>> {
   let mut lines = s.lines();
   let line = lines.next().expect("");
   let mut line_attrs = line.split(' ');
   let mut builder = hyper::Request::builder();
   if let Some(attr) = line_attrs.next() {
       builder = builder.method(hyper::Method::from_str(attr).expect("expect in setting method"));
   }
   if let Some(attr) = line_attrs.next() {
       builder = builder.uri(attr);
   }
   if let Some(attr) = line_attrs.next() {
       builder = builder.version(match attr {
           "HTTP/0.9" => hyper::Version::HTTP_09,
           "HTTP/1.0" => hyper::Version::HTTP_10,
           "HTTP/2.0" => hyper::Version::HTTP_2,
           "HTTP/3.0" => hyper::Version::HTTP_3,
           _ => hyper::Version::default()
       });
   }
   while let Some(line) = lines.next() {
       if line.is_empty() {
           break;
       }
       let pair = line.split_once(':').expect("");
       builder = builder.header(pair.0, pair.1);
   }
   if let Some(body_str) = lines.next() {
       builder.body(Some(body_str)).expect("")
   } else {
       builder.body(None).expect("")
   }
}

[rust] 将合法http字符串切片转换为hyper::Request结构的方法的评论 (共 条)

分享到微博请遵守国家法律