use ferrijs_fetch::{MultipartField, MultipartValue, multipart_boundary, serialize_multipart};
use ferrijs_std::web::form_data::{FormDataJs, FormEntry};
pub fn form_data_from_fields(fields: &[MultipartField]) -> FormDataJs {
FormDataJs::from_entries(
fields
.iter()
.map(|field| {
let entry = match &field.value {
MultipartValue::Text(text) => FormEntry::Text(text.clone()),
MultipartValue::File {
filename,
content_type,
bytes,
} => FormEntry::File {
bytes: bytes.clone(),
filename: filename.clone(),
content_type: content_type.clone(),
},
};
(field.name.clone(), entry)
})
.collect(),
)
}
pub fn form_data_to_fields(form: &FormDataJs) -> Vec<MultipartField> {
form
.entries_slice()
.iter()
.map(|(name, entry)| MultipartField {
name: name.clone(),
value: match entry {
FormEntry::Text(text) => MultipartValue::Text(text.clone()),
FormEntry::File {
bytes,
filename,
content_type,
} => MultipartValue::File {
filename: filename.clone(),
content_type: content_type.clone(),
bytes: bytes.clone(),
},
},
})
.collect()
}
pub fn form_data_to_multipart(form: &FormDataJs) -> (Vec<u8>, String) {
serialize_multipart(&form_data_to_fields(form), &multipart_boundary())
}