use axum::extract::Multipart;
use crate::error::ImageEndpointError;
#[derive(Debug)]
pub struct ImageMultipart {
pub image: Vec<u8>,
pub image_name: String,
}
impl ImageMultipart {
pub async fn try_from_multipart(mut multipart: Multipart) -> Result<Self, ImageEndpointError> {
let mut image: Option<Vec<u8>> = None;
let mut image_name: Option<String> = None;
while let Some(field) = multipart.next_field().await? {
match (&field.name(), field.file_name()) {
(Some("image"), Some(image_file_name)) => {
image_name = Some(image_file_name.into());
image = Some(field.bytes().await?.into());
}
_ => break,
}
}
if let (Some(image), Some(image_name)) = (image, image_name) {
Ok(Self { image, image_name })
} else {
Err(ImageEndpointError::MultipartFieldsMissing)
}
}
}