releasaurus-core 0.19.0

A comprehensive release automation tool that streamlines the software release process across multiple programming languages and forge platforms
Documentation
use crate::{
    forge::request::FileChange,
    result::Result,
    updater::{manager::UpdaterPackage, traits::PackageUpdater},
};

pub struct CompositeUpdater {
    updaters: Vec<Box<dyn PackageUpdater>>,
}

impl CompositeUpdater {
    pub fn new(updaters: Vec<Box<dyn PackageUpdater>>) -> Self {
        Self { updaters }
    }
}

impl PackageUpdater for CompositeUpdater {
    fn update(
        &self,
        package: &UpdaterPackage,
        workspace_packages: &[UpdaterPackage],
    ) -> Result<Option<Vec<FileChange>>> {
        let mut file_changes = vec![];

        for updater in self.updaters.iter() {
            if let Some(changes) =
                updater.update(package, workspace_packages)?
            {
                file_changes.extend(changes);
            }
        }

        if file_changes.is_empty() {
            return Ok(None);
        }

        Ok(Some(file_changes))
    }
}