Features
-
Stream
-
Preparse headers of part
Example
let body = Body::wrap_stream(stream);
let mut form = FormData::new("----WebKitFormBoundaryWLHCs9qmcJJoyjKR", body);
while let Some(mut field) = form.try_next().await? {
assert!(!field.consumed());
assert_eq!(field.length, 0);
match field.index {
Some(0) => {
assert_eq!(field.name, "_method");
assert_eq!(field.filename, None);
assert_eq!(field.content_type, None);
}
Some(1) => {
assert_eq!(field.name, "profile[blog]");
assert_eq!(field.filename, None);
assert_eq!(field.content_type, None);
}
Some(2) => {
assert_eq!(field.name, "profile[public_email]");
assert_eq!(field.filename, None);
assert_eq!(field.content_type, None);
}
Some(3) => {
assert_eq!(field.name, "profile[interests]");
assert_eq!(field.filename, None);
assert_eq!(field.content_type, None);
}
Some(4) => {
assert_eq!(field.name, "profile[bio]");
assert_eq!(field.filename, None);
assert_eq!(field.content_type, None);
}
Some(5) => {
assert_eq!(field.name, "media");
assert_eq!(field.filename, Some(String::new()));
assert_eq!(field.content_type, Some(mime::APPLICATION_OCTET_STREAM));
}
Some(6) => {
assert_eq!(field.name, "commit");
assert_eq!(field.filename, None);
assert_eq!(field.content_type, None);
}
_ => {}
}
let buffer = field.bytes().await?;
match field.index {
Some(0) => {
assert_eq!(buffer, "put");
}
Some(1) => {
assert_eq!(buffer, "");
}
Some(2) => {
assert_eq!(buffer, "");
}
Some(3) => {
assert_eq!(buffer, "");
}
Some(4) => {
assert_eq!(buffer, "hello\r\n\r\n\"quote\"");
}
Some(5) => {
assert_eq!(buffer, "");
}
Some(6) => {
assert_eq!(buffer, "Save");
}
_ => {}
}
assert_eq!(field.length, buffer.len() as u64);
assert!(field.consumed());
}
let state = form.state();
let state = state.try_lock().map_err(|e| anyhow!(e.to_string()))?;
assert_eq!(state.eof(), true);
assert_eq!(state.total(), 7);