oxygengine_core/storage/engines/
fs.rs1#![cfg(not(feature = "web"))]
2
3use crate::storage::{StorageEngine, StorageError, StorageResult};
4use std::{
5 env::var,
6 fs::{read, write},
7 path::{Path, PathBuf},
8};
9
10#[derive(Clone)]
11pub struct FsStorageEngine {
12 pub root: PathBuf,
13}
14
15impl Default for FsStorageEngine {
16 fn default() -> Self {
17 Self {
18 root: match var("OXY_STORAGE_ENGINE_PATH") {
19 Ok(value) => value.into(),
20 Err(_) => Default::default(),
21 },
22 }
23 }
24}
25
26impl FsStorageEngine {
27 pub fn new<P>(path: P) -> Self
28 where
29 P: AsRef<Path>,
30 {
31 Self {
32 root: match var("OXY_STORAGE_ENGINE_PATH") {
33 Ok(value) => value.into(),
34 Err(_) => path.as_ref().into(),
35 },
36 }
37 }
38}
39
40impl StorageEngine for FsStorageEngine {
41 fn load(&mut self, path: &str) -> StorageResult<Vec<u8>> {
42 let path = self.root.join(path);
43 match read(path) {
44 Ok(data) => Ok(data),
45 Err(error) => Err(StorageError::CouldNotLoadData(error.to_string())),
46 }
47 }
48
49 fn store(&mut self, path: &str, data: &[u8]) -> StorageResult<()> {
50 let path = self.root.join(path);
51 match write(path, data) {
52 Ok(_) => Ok(()),
53 Err(error) => Err(StorageError::CouldNotStoreData(error.to_string())),
54 }
55 }
56}