form-data 0.0.2

AsyncRead/AsyncWrite/Stream `multipart/form-data`
Documentation

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);

License