agentics_storage/
factory.rs1use std::path::{Path, PathBuf};
2use std::sync::Arc;
3
4use crate::{
5 LocalStorage, LocalStorageOptions, Result, S3Storage, S3StorageOptions, Storage, StorageError,
6};
7
8#[derive(Debug, Clone)]
10pub enum StorageFactoryOptions {
11 Local(LocalStorageOptions),
12 S3(S3StorageOptions),
13}
14
15pub async fn build_storage(options: StorageFactoryOptions) -> anyhow::Result<Arc<dyn Storage>> {
17 match options {
18 StorageFactoryOptions::Local(options) => Ok(Arc::new(LocalStorage::from_options(options))),
19 StorageFactoryOptions::S3(options) => Ok(Arc::new(S3Storage::from_options(options).await?)),
20 }
21}
22
23pub fn storage_work_root(work_root: Option<&Path>) -> Result<PathBuf> {
25 let root = work_root
26 .filter(|value| !value.as_os_str().is_empty())
27 .map(Path::to_path_buf)
28 .unwrap_or_else(|| std::env::temp_dir().join("agentics-storage-work"));
29 if !root.is_absolute() {
30 return Err(StorageError::InvalidKey(
31 "AGENTICS_STORAGE_WORK_ROOT must be an absolute path".to_string(),
32 ));
33 }
34 Ok(root)
35}