wae_storage/providers/
local.rs1use crate::{StorageConfig, StorageProvider, StorageResult};
4
5use url::Url;
6use wae_types::WaeError;
7
8pub struct LocalStorageProvider;
12
13impl StorageProvider for LocalStorageProvider {
14 fn sign_url(&self, path: &str, config: &StorageConfig) -> StorageResult<Url> {
15 if path.is_empty() {
16 return Err(WaeError::invalid_params("path", "Empty path"));
17 }
18
19 if path.starts_with("http://") || path.starts_with("https://") {
20 return Url::parse(path).map_err(|e| WaeError::invalid_params("path", e.to_string()));
21 }
22
23 let base_url_str = config.cdn_url.as_deref().unwrap_or("http://localhost:3000/uploads");
24
25 let base_url = Url::parse(base_url_str).map_err(|e| WaeError::invalid_params("base_url", e.to_string()))?;
26 let url = base_url.join(path.trim_start_matches('/')).map_err(|e| WaeError::invalid_params("url", e.to_string()))?;
27
28 Ok(url)
29 }
30
31 fn get_presigned_put_url(&self, key: &str, config: &StorageConfig) -> StorageResult<Url> {
32 let base_url_str = config.endpoint.as_deref().unwrap_or("http://localhost:3000/api/upload");
33
34 let base_url = Url::parse(base_url_str).map_err(|e| WaeError::invalid_params("base_url", e.to_string()))?;
35 let url = base_url.join(key.trim_start_matches('/')).map_err(|e| WaeError::invalid_params("url", e.to_string()))?;
36
37 Ok(url)
38 }
39}