accepted 0.3.2

A text editor to be ACCEPTED.
Documentation
use crate::core::Core;
use crate::core::CoreBuffer;
use std::fs;
use std::io::{BufReader, BufWriter};
use std::path::Path;
use std::path::PathBuf;

pub trait Storage<B: CoreBuffer> {
    fn load(&mut self) -> Core<B>;
    fn save(&mut self, core: &Core<B>) -> bool;
    fn path(&self) -> &Path;
}

impl<B: CoreBuffer> Storage<B> for PathBuf {
    fn load(&mut self) -> Core<B> {
        fs::File::open(self)
            .and_then(|f| Core::<B>::from_reader(BufReader::new(f)))
            .unwrap_or_default()
    }

    fn save(&mut self, core: &Core<B>) -> bool {
        if let Ok(f) = fs::File::create(self) {
            core.core_buffer().write_to(&mut BufWriter::new(f)).is_ok()
        } else {
            false
        }
    }

    fn path(&self) -> &Path {
        self.as_ref()
    }
}