flyer 2.7.0

HTTP framework for rust
Documentation
use std::collections::HashMap;

use anyhow::Result;

use crate::{
    storage::{DEFAULT_STORAGE, GLOBAL_STORAGE},
    utils::Values
};

pub type Files = HashMap<String, File>;

#[derive(Debug, Clone)]
pub struct File {
    pub name: String,
    pub mime: String,
    pub content: Vec<u8>,
}

#[derive(Debug, Clone)]
pub struct Form {
    pub values: Values,
    pub files: Files,
}

impl File {
    pub fn new(name: &str, content: Vec<u8>) -> Self {
        return Self {
            name: String::from(name),
            mime: mime_guess::from_ext(&name.split(".").last().map(|v| String::from(v))
                .unwrap_or(String::new()))
                .first()
                .unwrap_or(mime_guess::mime::APPLICATION_OCTET_STREAM)
                .to_string(), 
            content: content,
        }
    }

    pub(crate) fn create(name: &str, mime: &str, content: Vec<u8>) -> Self {
        return Self {
            name: String::from(name),
            mime: String::from(mime),
            content: content,
        }
    }

    #[allow(static_mut_refs)]
    pub async fn save_as(&self, folder: &str, name: &str) -> Result<String> {
        unsafe  {
            return GLOBAL_STORAGE
                .get(DEFAULT_STORAGE)
                .unwrap()
                .save_as(folder, name, self);
        }
    }

    #[allow(static_mut_refs)]
    pub async fn save(&self, folder: &str) -> Result<String> {
        unsafe  {
            return GLOBAL_STORAGE
                .get(DEFAULT_STORAGE)
                .unwrap()
                .save(folder, self);
        }
    }
}

impl Form {
    pub fn new(values: Values, files: Files) -> Self {
        return Self {
            values: values,
            files: files,
        }
    }
}