use async_trait::async_trait;
use crate::context::FactoryContext;
use crate::Result;
#[async_trait]
pub trait Factory: Send + Sync {
type Output: Send;
fn build(&self, ctx: &mut FactoryContext) -> Self::Output;
async fn create(&self, ctx: &mut FactoryContext) -> Result<Self::Output>;
async fn create_list(&self, ctx: &mut FactoryContext, count: usize) -> Result<Vec<Self::Output>> {
let mut results = Vec::with_capacity(count);
for _ in 0..count {
results.push(self.create(ctx).await?);
}
Ok(results)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BuildStrategy {
Build,
Create,
HttpCreate,
}