3 use futures_util::{TryFutureExt, TryStreamExt};
4 use warp::{multipart, Filter};
7 async fn form_fields() {
8 let _ = pretty_env_logger::try_init();
10 let route = multipart::form().and_then(|form: multipart::FormData| {
12 // Collect the fields into (name, value): (String, Vec<u8>)
13 let part: Result<Vec<(String, Vec<u8>)>, warp::Rejection> = form
15 let name = part.name().to_string();
16 let value = part.stream().try_fold(Vec::new(), |mut vec, data| {
18 async move { Ok(vec) }
20 value.map_ok(move |vec| (name, vec))
25 panic!("multipart error: {:?}", e);
31 let boundary = "--abcdef1234--";
35 content-disposition: form-data; name=\"foo\"\r\n\r\n\
42 let req = warp::test::request()
44 .header("content-length", body.len())
47 format!("multipart/form-data; boundary={}", boundary),
51 let vec = req.filter(&route).await.unwrap();
52 assert_eq!(&vec[0].0, "foo");
53 assert_eq!(&vec[0].1, b"bar");