solar-core 1.0.3

Core library for cargo-solar command.
Documentation
mod release_cargo_bin_general;
mod release_cargo_lib_general;
mod test_cargo_general;

pub use release_cargo_bin_general::ReleaseCargoBinGeneral;
pub use release_cargo_lib_general::ReleaseCargoLibGeneral;
use serde::{Deserialize, Serialize};
pub use test_cargo_general::TestCargoGeneral;

use clap::ValueEnum;

use crate::tool::github_workflows::{parameters::Parameters, workflow_file::WorkflowFile};

#[derive(
    ValueEnum, Clone, PartialEq, Debug, Serialize, Deserialize, Default, Eq, PartialOrd, Ord,
)]
pub enum Workflow {
    #[default]
    ReleaseCargoBinGeneral,
    ReleaseCargoLibGeneral,
    TestCargoGeneral,
}

impl Workflow {
    pub fn get(&self) -> Box<dyn WorkflowDetails> {
        match self {
            Self::ReleaseCargoBinGeneral => Box::new(ReleaseCargoBinGeneral::new()),
            Self::ReleaseCargoLibGeneral => Box::new(ReleaseCargoLibGeneral::new()),
            Self::TestCargoGeneral => Box::new(TestCargoGeneral::new()),
        }
    }
}

pub trait WorkflowDetails {
    fn new() -> Self
    where
        Self: Sized;

    fn file(&self) -> WorkflowFile;

    fn get(&self, parameters: &Parameters) -> String;
}