use crate::{
VersionError,
cli::{
files::FilesCommand,
getset::{GetSet, GetSetBuild, GetSetRm, SetVer},
package::PackageCommand,
},
version::Scope,
};
use clap::Subcommand;
#[derive(Subcommand, Debug, Clone, PartialEq)]
#[command(rename_all = "lower", arg_required_else_help(true))]
pub enum VersionCommand {
Major(GetSet),
Minor(GetSet),
Patch(GetSet),
Alpha(GetSetRm),
Beta(GetSetRm),
RC(GetSetRm),
Build(GetSetBuild),
Get,
Set(SetVer),
Version,
Revision,
File(FilesCommand),
Package(PackageCommand),
}
impl TryFrom<&VersionCommand> for Scope {
type Error = VersionError;
fn try_from(cmd: &VersionCommand) -> Result<Self, VersionError> {
let scope = match cmd {
VersionCommand::Major(getset) => Scope::Major(getset.try_into()?),
VersionCommand::Minor(getset) => Scope::Minor(getset.try_into()?),
VersionCommand::Patch(getset) => Scope::Patch(getset.try_into()?),
VersionCommand::Alpha(getset) => Scope::Alpha(getset.try_into()?),
VersionCommand::Beta(getset) => Scope::Beta(getset.try_into()?),
VersionCommand::RC(getset) => Scope::RC(getset.try_into()?),
VersionCommand::Build(getset) => Scope::Build(getset.try_into()?),
VersionCommand::Get => Scope::Get,
VersionCommand::Version => Scope::Version,
VersionCommand::Revision => Scope::Revision,
VersionCommand::File(file_cmd) => Scope::File(file_cmd.try_into()?),
VersionCommand::Package(package_cmd) => package_cmd.try_into()?,
VersionCommand::Set(setver) => Scope::Set(setver.try_into()?),
};
Ok(scope)
}
}
impl TryFrom<VersionCommand> for Scope {
type Error = VersionError;
fn try_from(cmd: VersionCommand) -> Result<Self, VersionError> {
let scope = match cmd {
VersionCommand::Major(getset) => Scope::Major(getset.try_into()?),
VersionCommand::Minor(getset) => Scope::Minor(getset.try_into()?),
VersionCommand::Patch(getset) => Scope::Patch(getset.try_into()?),
VersionCommand::Alpha(getset) => Scope::Alpha(getset.try_into()?),
VersionCommand::Beta(getset) => Scope::Beta(getset.try_into()?),
VersionCommand::RC(getset) => Scope::RC(getset.try_into()?),
VersionCommand::Build(getset) => Scope::Build(getset.try_into()?),
VersionCommand::Get => Scope::Get,
VersionCommand::Version => Scope::Version,
VersionCommand::Revision => Scope::Revision,
VersionCommand::File(file_cmd) => Scope::File(file_cmd.try_into()?),
VersionCommand::Package(package_cmd) => package_cmd.try_into()?,
VersionCommand::Set(setver) => Scope::Set(setver.try_into()?),
};
Ok(scope)
}
}