use std::fmt::Debug;
use knope_versioning::{Action, VersionedFile};
use crate::{
config,
step::{issues, releases},
};
#[derive(Clone, Debug)]
pub(crate) struct State {
pub(crate) jira_config: Option<config::Jira>,
pub(crate) github: GitHub,
pub(crate) gitea: Gitea,
pub(crate) gitea_config: Option<config::Gitea>,
pub(crate) github_config: Option<config::GitHub>,
pub(crate) issue: Issue,
pub(crate) packages: Vec<releases::Package>,
pub(crate) all_versioned_files: Vec<VersionedFile>,
pub(crate) pending_actions: Vec<Action>,
pub(crate) all_git_tags: Vec<String>,
pub(crate) ignore_conventional_commits: bool,
}
impl State {
#[must_use]
pub(crate) fn new(
jira_config: Option<config::Jira>,
github_config: Option<config::GitHub>,
gitea_config: Option<config::Gitea>,
packages: Vec<releases::Package>,
all_versioned_files: Vec<VersionedFile>,
all_git_tags: Vec<String>,
ignore_conventional_commits: bool,
) -> Self {
State {
jira_config,
gitea: Gitea::New,
gitea_config,
github: GitHub::New,
github_config,
issue: Issue::Initial,
packages,
all_versioned_files,
all_git_tags,
pending_actions: Vec::new(),
ignore_conventional_commits,
}
}
}
#[derive(Clone, Copy, Debug)]
pub(crate) enum RunType<T> {
DryRun(T),
Real(T),
}
impl<T> RunType<T> {
#[must_use]
pub(crate) fn of<R>(&self, new_value: R) -> RunType<R> {
match self {
RunType::DryRun(_) => RunType::DryRun(new_value),
RunType::Real(_) => RunType::Real(new_value),
}
}
pub(crate) fn take(self) -> (RunType<()>, T) {
match self {
RunType::DryRun(inner) => (RunType::DryRun(()), inner),
RunType::Real(inner) => (RunType::Real(()), inner),
}
}
}
#[derive(Clone, Debug)]
pub(crate) enum Issue {
Initial,
Selected(issues::Issue),
}
#[derive(Clone, Debug)]
pub(crate) enum GitHub {
New,
Initialized { token: String, agent: ureq::Agent },
}
#[derive(Clone, Debug)]
pub(crate) enum Gitea {
New,
Initialized { token: String, agent: ureq::Agent },
}