Skip to content

Commit 776e6a9

Browse files
committed
feat(models+domain): reintegrate local storage
1 parent 09a02d2 commit 776e6a9

File tree

4 files changed

+33
-7
lines changed

4 files changed

+33
-7
lines changed

crates/domain/src/storage_glue.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
use models::{
2-
MemoryStorageCredentials, R2StorageCredentials, StorageCredentials,
2+
LocalStorageCredentials, MemoryStorageCredentials, R2StorageCredentials,
3+
StorageCredentials,
34
};
45
use storage::{BlobStorage, BlobStorageResult};
56

67
pub async fn storage_creds_to_blob_storage(
78
creds: StorageCredentials,
89
) -> BlobStorageResult<BlobStorage> {
910
match creds {
11+
StorageCredentials::Local(LocalStorageCredentials(path)) => {
12+
BlobStorage::new_fs(path).await
13+
}
1014
StorageCredentials::Memory(MemoryStorageCredentials) => {
1115
Ok(BlobStorage::new_memory())
1216
}

crates/models/src/store/creds.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
use std::path::PathBuf;
2+
13
use serde::{Deserialize, Serialize};
24

35
/// Credentials for a storage backend.
46
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
57
pub enum StorageCredentials {
8+
/// Storage credentials for local filesystem storage.
9+
Local(LocalStorageCredentials),
610
/// Storage credentials for R2 object storage.
711
R2(R2StorageCredentials),
812
/// Storage credentials for in-memory storage.
@@ -12,6 +16,8 @@ pub enum StorageCredentials {
1216
/// Public view of [`StorageCredentials`].
1317
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
1418
pub enum PvStorageCredentials {
19+
/// Storage credentials for local filesystem storage.
20+
Local(LocalStorageCredentials),
1521
/// Storage credentials for R2 object storage.
1622
R2(PvR2StorageCredentials),
1723
/// Storage credentials for in-memory storage.
@@ -21,6 +27,7 @@ pub enum PvStorageCredentials {
2127
impl From<StorageCredentials> for PvStorageCredentials {
2228
fn from(value: StorageCredentials) -> Self {
2329
match value {
30+
StorageCredentials::Local(local) => PvStorageCredentials::Local(local),
2431
StorageCredentials::R2(r2) => PvStorageCredentials::R2(r2.into()),
2532
StorageCredentials::Memory(memory) => {
2633
PvStorageCredentials::Memory(memory)
@@ -29,6 +36,10 @@ impl From<StorageCredentials> for PvStorageCredentials {
2936
}
3037
}
3138

39+
/// Storage credentials for local filesystem storage.
40+
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
41+
pub struct LocalStorageCredentials(pub PathBuf);
42+
3243
/// Storage credentials for in-memory storage.
3344
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3445
pub struct MemoryStorageCredentials;

crates/mutate-domain/src/migrate.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use std::str::FromStr;
1+
use std::{path::PathBuf, str::FromStr};
22

33
use miette::{Context, IntoDiagnostic, Result};
44
use models::{
5-
Cache, EmailAddress, EntityName, HumanName, MemoryStorageCredentials, Org,
5+
Cache, EmailAddress, EntityName, HumanName, LocalStorageCredentials, Org,
66
OrgIdent, RecordId, StorageCredentials, Store, StoreConfiguration, User,
77
Visibility,
88
};
@@ -67,7 +67,9 @@ impl MutationService {
6767
let albert_store = Store {
6868
id: RecordId::from_str("01JXGXVF0MVQNGRM565YHM20BC").unwrap(),
6969
org: federation.id,
70-
credentials: StorageCredentials::Memory(MemoryStorageCredentials),
70+
credentials: StorageCredentials::Local(LocalStorageCredentials(
71+
PathBuf::from("/tmp/rambit-files"),
72+
)),
7173
config: StoreConfiguration {},
7274
name: EntityName::new("albert"),
7375
};

crates/site-app/src/pages/dashboard/store.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
use leptos::prelude::*;
22
use leptos_fetch::QueryClient;
3-
use models::{PvR2StorageCredentials, PvStorageCredentials, PvStore};
3+
use models::{
4+
LocalStorageCredentials, MemoryStorageCredentials, PvR2StorageCredentials,
5+
PvStorageCredentials, PvStore,
6+
};
47

58
use crate::{
69
components::{
@@ -105,8 +108,14 @@ fn StoreDataRow(store: PvStore) -> impl IntoView {
105108
PvStorageCredentials::R2(PvR2StorageCredentials::Default {
106109
bucket,
107110
..
108-
}) => format!("R2 ({bucket})").into_any(),
109-
PvStorageCredentials::Memory(_) => "Memory (DEBUG)".into_any(),
111+
}) => view! { "R2 (" { bucket } ")" }.into_any(),
112+
PvStorageCredentials::Memory(MemoryStorageCredentials) => {
113+
"Memory (DEBUG)".into_any()
114+
}
115+
PvStorageCredentials::Local(LocalStorageCredentials(path)) => {
116+
view! { "Local (DEBUG, \"" { path.display().to_string() } "\")" }
117+
.into_any()
118+
}
110119
};
111120

112121
view! {

0 commit comments

Comments
 (0)