wimc 0.1.0

Wizards in Memory Cache
use std::fs::{read_to_string, File, OpenOptions};
use std::io::Write;

use wimcm::WIMCError;

use crate::constants::{FILE_NAME, HOME, SLASH};

pub fn save(string: &str) -> Result<(), WIMCError> {
    home_file()?
        .write_all(string.as_bytes())
        .map_err(|_err| WIMCError)
}

fn home_file() -> Result<File, WIMCError> {
    OpenOptions::new()
        .create(true)
        .write(true)
        .append(false)
        .open(file_name()?)
        .map_err(|_err| WIMCError)
}

pub fn load() -> Result<String, WIMCError> {
    let result = read_to_string(file_name()?).map_err(|_err| WIMCError);
    result
}

fn file_name() -> Result<String, WIMCError> {
    std::env::var(HOME)
        .map(|string| format!("{}{}{}", string, SLASH, FILE_NAME))
        .map_err(|_err| WIMCError)
}

#[cfg(test)]
mod tests {
    use std::fs::remove_file;

    use crate::saver::{file_name, load, save};

    #[test]
    fn test() {
        const TEST_TEXT: &str = "Hello";
        save(TEST_TEXT).unwrap();
        assert_eq!(load().unwrap(), TEST_TEXT);
        save(TEST_TEXT).unwrap();
        assert_eq!(load().unwrap(), TEST_TEXT);
        let _ = remove_file(file_name().unwrap());
    }

    #[test]
    pub fn tests() {
        let filename = file_name();
        assert_eq!("/home/adri/wimc.json", filename.unwrap())
    }
}