version_manager/cli/
package.rs1use super::{
2 files::FilesCommand,
3 getset::{GetSet, GetSetBuild, GetSetRm, SetVer},
4};
5use crate::{VersionError, version::Scope};
6use clap::{Parser, Subcommand};
7
8#[derive(Parser, Debug, Clone, PartialEq)]
9#[command(arg_required_else_help(true))]
10pub struct PackageCommand {
11 pub package_name: Option<String>,
13 #[clap(subcommand)]
14 pub command: PackageOperation,
15}
16
17impl TryFrom<PackageCommand> for Scope {
18 type Error = VersionError;
19
20 fn try_from(cmd: PackageCommand) -> Result<Self, Self::Error> {
21 Ok(Scope::Package(
22 (&cmd).try_into()?,
23 Box::new(cmd.command.try_into()?),
24 ))
25 }
26}
27
28impl TryFrom<&PackageCommand> for Scope {
29 type Error = VersionError;
30
31 fn try_from(cmd: &PackageCommand) -> Result<Self, Self::Error> {
32 Ok(Scope::Package(
33 cmd.try_into()?,
34 Box::new((&cmd.command).try_into()?),
35 ))
36 }
37}
38
39impl TryFrom<PackageCommand> for String {
40 type Error = VersionError;
41
42 fn try_from(cmd: PackageCommand) -> Result<Self, Self::Error> {
43 match cmd.package_name {
44 Some(ref name) => Ok(name.clone()),
45 None => {
46 if cmd.command == PackageOperation::List {
47 Ok("".to_string())
48 } else {
49 return Err(VersionError::PackageNameRequired);
50 }
51 }
52 }
53 }
54}
55
56impl TryFrom<&PackageCommand> for String {
57 type Error = VersionError;
58
59 fn try_from(cmd: &PackageCommand) -> Result<Self, Self::Error> {
60 match cmd.package_name {
61 Some(ref name) => Ok(name.clone()),
62 None => {
63 if cmd.command == PackageOperation::List {
64 Ok("".to_string())
65 } else {
66 return Err(VersionError::PackageNameRequired);
67 }
68 }
69 }
70 }
71}
72
73#[derive(Subcommand, Debug, Clone, PartialEq)]
74#[command(arg_required_else_help(true))]
75pub enum PackageOperation {
76 Major(GetSet),
78 Minor(GetSet),
80 Patch(GetSet),
82 Alpha(GetSetRm),
84 Beta(GetSetRm),
86 RC(GetSetRm),
88 Build(GetSetBuild),
90 Get,
92 Set(SetVer),
94 Version,
96 Revision,
98 File(FilesCommand),
100 Rm,
102 List,
104}
105
106impl TryFrom<PackageOperation> for Scope {
107 type Error = VersionError;
108
109 fn try_from(cmd: PackageOperation) -> Result<Self, Self::Error> {
110 let scope = match cmd {
111 PackageOperation::Major(getset) => Scope::Major(getset.try_into()?),
112 PackageOperation::Minor(getset) => Scope::Minor(getset.try_into()?),
113 PackageOperation::Patch(getset) => Scope::Patch(getset.try_into()?),
114 PackageOperation::Alpha(getset) => Scope::Alpha(getset.try_into()?),
115 PackageOperation::Beta(getset) => Scope::Beta(getset.try_into()?),
116 PackageOperation::RC(getset) => Scope::RC(getset.try_into()?),
117 PackageOperation::Build(getset) => Scope::Build(getset.try_into()?),
118 PackageOperation::Get => Scope::Get,
119 PackageOperation::Version => Scope::Version,
120 PackageOperation::Revision => Scope::Revision,
121 PackageOperation::File(file_cmd) => Scope::File(file_cmd.try_into()?),
122 PackageOperation::Rm => Scope::RmPackage,
123 PackageOperation::List => Scope::ListPackages,
124 PackageOperation::Set(setver) => Scope::Set(setver.try_into()?),
125 };
126 Ok(scope)
127 }
128}
129
130impl TryFrom<&PackageOperation> for Scope {
131 type Error = VersionError;
132
133 fn try_from(cmd: &PackageOperation) -> Result<Self, Self::Error> {
134 let scope = match cmd {
135 PackageOperation::Major(getset) => Scope::Major(getset.try_into()?),
136 PackageOperation::Minor(getset) => Scope::Minor(getset.try_into()?),
137 PackageOperation::Patch(getset) => Scope::Patch(getset.try_into()?),
138 PackageOperation::Alpha(getset) => Scope::Alpha(getset.try_into()?),
139 PackageOperation::Beta(getset) => Scope::Beta(getset.try_into()?),
140 PackageOperation::RC(getset) => Scope::RC(getset.try_into()?),
141 PackageOperation::Build(getset) => Scope::Build(getset.try_into()?),
142 PackageOperation::Get => Scope::Get,
143 PackageOperation::Version => Scope::Version,
144 PackageOperation::Revision => Scope::Revision,
145 PackageOperation::File(file_cmd) => Scope::File(file_cmd.try_into()?),
146 PackageOperation::Rm => Scope::RmPackage,
147 PackageOperation::List => Scope::ListPackages,
148 PackageOperation::Set(setver) => Scope::Set(setver.try_into()?),
149 };
150 Ok(scope)
151 }
152}