axum_test/multipart/
mod.rs

1//!
2//! This supplies the building blocks for sending multipart forms using
3//! [`TestRequest::multipart()`](crate::TestRequest::multipart()).
4//!
5//! The request body can be built using [`MultipartForm`] and [`Part`].
6//!
7//! # Simple example
8//!
9//! ```rust
10//! # async fn test() -> Result<(), Box<dyn ::std::error::Error>> {
11//! #
12//! use axum::Router;
13//! use axum_test::TestServer;
14//! use axum_test::multipart::MultipartForm;
15//!
16//! let app = Router::new();
17//! let server = TestServer::new(app)?;
18//!
19//! let multipart_form = MultipartForm::new()
20//!     .add_text("name", "Joe")
21//!     .add_text("animals", "foxes");
22//!
23//! let response = server.post(&"/my-form")
24//!     .multipart(multipart_form)
25//!     .await;
26//! #
27//! # Ok(()) }
28//! ```
29//!
30//! # Sending byte parts
31//!
32//! ```rust
33//! # async fn test() -> Result<(), Box<dyn ::std::error::Error>> {
34//! #
35//! use axum::Router;
36//! use axum_test::TestServer;
37//! use axum_test::multipart::MultipartForm;
38//! use axum_test::multipart::Part;
39//!
40//! let app = Router::new();
41//! let server = TestServer::new(app)?;
42//!
43//! let image_bytes = include_bytes!("../../README.md");
44//! let image_part = Part::bytes(image_bytes.as_slice())
45//!     .file_name(&"README.md")
46//!     .mime_type(&"text/markdown");
47//!
48//! let multipart_form = MultipartForm::new()
49//!     .add_part("file", image_part);
50//!
51//! let response = server.post(&"/my-form")
52//!     .multipart(multipart_form)
53//!     .await;
54//! #
55//! # Ok(()) }
56//! ```
57//!
58
59mod multipart_form;
60pub use self::multipart_form::*;
61
62mod part;
63pub use self::part::*;