summaryrefslogtreecommitdiffstats
path: root/src/files.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-06-01 16:10:26 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-06-01 17:27:40 +0100
commit6ee4190a26f32bfa953302ee363ad3bb6c384ebb (patch)
tree2c3182c29d5780a0ad9c9770b5e546312bea49b4 /src/files.rs
parentf76c80c1d23177ab00c81240ee3a75d3bcda0e3b (diff)
downloadmacaw-web-6ee4190a26f32bfa953302ee363ad3bb6c384ebb.tar.gz
macaw-web-6ee4190a26f32bfa953302ee363ad3bb6c384ebb.tar.bz2
macaw-web-6ee4190a26f32bfa953302ee363ad3bb6c384ebb.zip
refactor: reorganise code
Diffstat (limited to 'src/files.rs')
-rw-r--r--src/files.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/files.rs b/src/files.rs
new file mode 100644
index 0000000..b9e50df
--- /dev/null
+++ b/src/files.rs
@@ -0,0 +1,50 @@
+use base64::{prelude::BASE64_STANDARD, Engine};
+use filamento::files::{opfs::OPFSError, FileStore, FilesMem, FilesOPFS};
+
+#[derive(Clone, Debug)]
+pub enum Files {
+ Mem(FilesMem),
+ Opfs(FilesOPFS),
+}
+
+impl FileStore for Files {
+ type Err = OPFSError;
+
+ async fn is_stored(&self, name: &str) -> Result<bool, Self::Err> {
+ match self {
+ Files::Mem(files_mem) => Ok(files_mem.is_stored(name).await.unwrap()),
+ Files::Opfs(files_opfs) => Ok(files_opfs.is_stored(name).await?),
+ }
+ }
+
+ async fn store(&self, name: &str, data: &[u8]) -> Result<(), Self::Err> {
+ match self {
+ Files::Mem(files_mem) => Ok(files_mem.store(name, data).await.unwrap()),
+ Files::Opfs(files_opfs) => Ok(files_opfs.store(name, data).await?),
+ }
+ }
+
+ async fn delete(&self, name: &str) -> Result<(), Self::Err> {
+ match self {
+ Files::Mem(files_mem) => Ok(files_mem.delete(name).await.unwrap()),
+ Files::Opfs(files_opfs) => Ok(files_opfs.delete(name).await?),
+ }
+ }
+}
+
+impl Files {
+ pub async fn get_src(&self, file_name: &str) -> Option<String> {
+ match self {
+ Files::Mem(files_mem) => {
+ if let Some(data) = files_mem.get_file(file_name).await {
+ let data = BASE64_STANDARD.encode(data);
+ Some(format!("data:image/jpg;base64, {}", data))
+ } else {
+ None
+ }
+ }
+ Files::Opfs(files_opfs) => files_opfs.get_src(file_name).await.ok(),
+ }
+ }
+}
+