use serde::Serialize;
use crate::operations::OperationResult;
use crate::packs::context::ExecutionContext;
use crate::packs::Pack;
use crate::Result;
#[derive(Debug, Serialize)]
pub struct PackResult {
pub pack_name: String,
pub success: bool,
pub operations: Vec<OperationResult>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct ExecuteResult {
pub pack_results: Vec<PackResult>,
pub total_packs: usize,
pub successful_packs: usize,
pub failed_packs: usize,
}
impl ExecuteResult {
pub fn is_success(&self) -> bool {
self.failed_packs == 0
}
}
pub trait Command: Send + Sync {
fn name(&self) -> &str;
fn execute_for_pack(&self, pack: &Pack, ctx: &ExecutionContext) -> Result<PackResult>;
}