use async_trait::async_trait;
use crate::definition::FlowDefinition;
use crate::error::WorkflowResult;
pub type DefinitionId = String;
#[async_trait]
pub trait DefinitionRepository: Send + Sync + 'static {
async fn save(&self, def: &FlowDefinition) -> WorkflowResult<DefinitionId>;
async fn get(&self, id: &DefinitionId) -> WorkflowResult<Option<FlowDefinition>>;
async fn get_active(&self, flow_key: &str) -> WorkflowResult<Option<FlowDefinition>>;
async fn list_versions(&self, flow_key: &str) -> WorkflowResult<Vec<FlowDefinition>>;
async fn set_active(&self, id: &DefinitionId) -> WorkflowResult<()>;
async fn deprecate(&self, id: &DefinitionId) -> WorkflowResult<()>;
}