#[cfg(feature = "fs")]
mod file;
#[cfg(feature = "fs")]
pub use file::FileStorage;
use async_trait::async_trait;
use crate::error::Result;
use crate::template::{Template, TemplateId};
#[async_trait]
pub trait Storage: 'static + Sync + Send {
async fn save_template(&self, template: &Template) -> Result<()>;
async fn get_template(&self, id: &TemplateId) -> Result<Template>;
async fn list_templates(&self) -> Result<Vec<Template>>;
async fn delete_template(&self, id: &TemplateId) -> Result<()>;
async fn save_template_file(&self, template_id: &TemplateId, path: &str, content: &[u8]) -> Result<()>;
async fn get_template_file(&self, template_id: &TemplateId, path: &str) -> Result<Vec<u8>>;
async fn list_template_files(&self, template_id: &TemplateId) -> Result<Vec<String>>;
}