axum-image-endpoint 0.1.1

Image Endpoint to upload big images and receive rescaled ones
Documentation
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)
        }
    }
}