use crate::infrastructure::{TemplateError, types::*};
use async_trait::async_trait;
use std::io;
use std::path::Path;
pub trait TemplateRepository: Send + Sync {
fn list_manifests(&self) -> Vec<TemplateManifest>;
fn get_manifest(&self, path: &str) -> Result<Option<TemplateManifest>, TemplateError>;
fn has_template(&self, path: &str) -> bool;
fn get_template_files(&self, template_path: &str) -> Vec<RawTemplateFile>;
}
#[async_trait]
pub trait TemplateDiscovery: Send + Sync {
async fn discover(
&self,
protocol: crate::protocols::Protocol,
role: crate::protocols::Role,
language: crate::generation::Language,
) -> Result<Template, TemplateError>;
}
pub trait TemplateExporter: Send + Sync {
fn export_template(&self, template: &TemplateManifest, output_dir: &Path) -> io::Result<()>;
fn export_all_templates(&self, output_dir: &Path) -> io::Result<usize>;
}
#[async_trait]
pub trait TemplateLoader: Send + Sync {
async fn load_template(&self, path: &Path) -> Result<Template, TemplateError>;
}