gitbox 2.1.3

Git toolbox to simplify adoption of conventional commits and semantic version, among other things.
Documentation
use crate::{domain::trigger::Trigger, usecase::metadata_spec::MetadataSpec};

pub type PrereleasePattern<'a> = Box<dyn Fn(u32) -> String + 'a>;
pub type OldPrereleasePattern<'a> = Box<dyn Fn(&str) -> u32 + 'a>;

pub struct DescribeConfiguration<'a> {
    prerelease: DescribePrereleaseConfiguration<'a>,
    metadata: DescribeMetadataConfiguration,
    triggers: DescribeTriggerConfiguration,
}

impl<'a> DescribeConfiguration<'a> {
    pub fn new(
        prerelease: DescribePrereleaseConfiguration<'a>,
        metadata: DescribeMetadataConfiguration,
        triggers: DescribeTriggerConfiguration,
    ) -> DescribeConfiguration<'a> {
        DescribeConfiguration {
            prerelease,
            metadata,
            triggers,
        }
    }
    pub fn prerelease(&self) -> &DescribePrereleaseConfiguration {
        &self.prerelease
    }
    pub fn metadata(&self) -> &DescribeMetadataConfiguration {
        &self.metadata
    }
    pub fn triggers(&self) -> &DescribeTriggerConfiguration {
        &self.triggers
    }
}

pub struct DescribePrereleaseConfiguration<'a> {
    prerelease: bool,
    prerelease_pattern: PrereleasePattern<'a>,
    old_prerelease_pattern: OldPrereleasePattern<'a>,
    prerelease_pattern_changed: bool,
}

impl<'a> DescribePrereleaseConfiguration<'a> {
    pub fn new(
        prerelease: bool,
        prerelease_pattern: PrereleasePattern<'a>,
        old_prerelease_pattern: OldPrereleasePattern<'a>,
        prerelease_pattern_changed: bool,
    ) -> DescribePrereleaseConfiguration<'a> {
        DescribePrereleaseConfiguration {
            prerelease,
            prerelease_pattern,
            old_prerelease_pattern,
            prerelease_pattern_changed,
        }
    }

    pub fn is_active(&self) -> bool {
        self.prerelease
    }
    pub fn pattern(&self) -> &PrereleasePattern<'a> {
        &self.prerelease_pattern
    }
    pub fn old_pattern(&self) -> &OldPrereleasePattern<'a> {
        &self.old_prerelease_pattern
    }
    pub fn pattern_changed(&self) -> bool {
        self.prerelease_pattern_changed
    }
}

pub struct DescribeMetadataConfiguration {
    specs: Vec<MetadataSpec>,
}

impl DescribeMetadataConfiguration {
    pub fn new(specs: Vec<MetadataSpec>) -> DescribeMetadataConfiguration {
        DescribeMetadataConfiguration { specs }
    }

    pub fn specs(&self) -> &Vec<MetadataSpec> {
        &self.specs
    }
}

pub struct DescribeTriggerConfiguration {
    major_trigger: Trigger,
    minor_trigger: Trigger,
    patch_trigger: Trigger,
}

impl DescribeTriggerConfiguration {
    pub fn new(
        major_trigger: Trigger,
        minor_trigger: Trigger,
        patch_trigger: Trigger,
    ) -> DescribeTriggerConfiguration {
        DescribeTriggerConfiguration {
            major_trigger,
            minor_trigger,
            patch_trigger,
        }
    }

    pub fn major(&self) -> &Trigger {
        &self.major_trigger
    }
    pub fn minor(&self) -> &Trigger {
        &self.minor_trigger
    }
    pub fn patch(&self) -> &Trigger {
        &self.patch_trigger
    }
}