vertigo_forms/
image_upload.rs1use base64::{Engine as _, engine::general_purpose::STANDARD_NO_PAD as BASE_64};
2use vertigo::DropFileItem;
3
4use crate::name_to_mime;
5
6#[derive(Clone, Debug, PartialEq, vertigo::AutoJsJson)]
7pub struct ImageUpload {
8 pub name: String,
9 pub mime: Option<String>,
10 pub data: String, }
12
13impl ImageUpload {
14 pub fn to_vec(&self) -> Result<Vec<u8>, base64::DecodeError> {
15 BASE_64.decode(&self.data)
16 }
17}
18
19impl From<DropFileItem> for ImageUpload {
20 fn from(item: DropFileItem) -> Self {
21 let mime_str = name_to_mime(&item.name);
22 let mime = if mime_str == "application/octet-stream" {
23 None
24 } else {
25 Some(mime_str.to_string())
26 };
27 Self {
28 name: item.name.clone(),
29 mime,
30 data: BASE_64.encode(&*item.data),
31 }
32 }
33}