pattrick_clap/
lib.rs

1use clap::{Parser, Subcommand, ValueEnum};
2use strum_macros::Display;
3
4#[derive(Parser)]
5#[clap(author, about="CLI to manage Azure DevOps Personal Access Tokens (PAT)", long_about = None)]
6#[clap(arg_required_else_help = true)]
7pub struct Cli {
8    #[clap(subcommand)]
9    pub command: Option<Commands>,
10    #[clap(flatten)]
11    pub verbose: clap_verbosity_flag::Verbosity,
12    #[clap(long, help = "Print version information")]
13    pub version: bool,
14}
15
16#[derive(Subcommand)]
17pub enum Commands {
18    /// Create a new PAT token
19    Create(CreateOpts),
20    /// List all PAT tokens
21    List(ListOpts),
22    /// Show contents of a PAT token
23    Get(GetOpts),
24    /// Delete a PAT token
25    Delete(DeleteOpts),
26    /// Update Pattrick
27    Update,
28}
29#[derive(Parser)]
30pub struct CreateOpts {
31    #[arg(help = "Display name of the PAT token")]
32    pub name: Option<String>,
33    #[arg(
34        long,
35        short,
36        default_value = "120",
37        help = "Number of seconds the token should be valid for"
38    )]
39    pub lifetime: i64,
40    #[arg(
41        long,
42        short,
43        value_enum,
44        default_values_t = vec![Scope::Packaging],
45        help = "Scope of the token"
46    )]
47    pub scope: Vec<Scope>,
48    #[arg(short, long, value_enum, default_value_t = Output::StdOut, help = "Output format of the token: print to stdout, write to dotenv or netrc")]
49    pub out: Output,
50}
51
52#[derive(Parser)]
53pub struct ListOpts {
54    #[arg(
55        default_value_t = false,
56        required = false,
57        short,
58        long,
59        help = "Show all tokens, including expired ones"
60    )]
61    pub all: bool,
62}
63
64#[derive(Parser)]
65pub struct DeleteOpts {
66    #[arg(default_value_t = String::from(""), required = false, short, long, help = "Name of the token to delete")]
67    pub name: String,
68    #[arg(default_value_t = String::from(""), required = false, short, long, help = "Id of the token to delete")]
69    pub id: String,
70    #[arg(
71        default_value_t = false,
72        required = false,
73        short,
74        long,
75        help = "Delete all tokens, including expired ones"
76    )]
77    pub all: bool,
78}
79
80#[derive(Parser)]
81pub struct GetOpts {
82    pub id: String,
83    #[arg(short, long, value_enum, default_value_t = Output::StdOut)]
84    pub out: Output,
85}
86
87#[derive(ValueEnum, Clone)]
88pub enum Output {
89    StdOut,
90    DotNetrc,
91    DotEnv,
92}
93
94#[derive(ValueEnum, Clone, Debug, Default, PartialEq, Eq, Display)]
95pub enum Scope {
96    FullAccess,
97    Advsec,
98    AdvsecWrite,
99    AdvsecManage,
100    AgentPools,
101    AgentPoolsManage,
102    Analytics,
103    AuditLog,
104    AuditStreamsManage,
105    Build,
106    BuildExecute,
107    Code,
108    CodeWrite,
109    CodeManage,
110    CodeFull,
111    CodeStatus,
112    ConnectedServer,
113    Dashboards,
114    DashboardsManage,
115    DropWrite,
116    Entitlements,
117    MemberEntitlementManagement,
118    MemberEntitlementManagementWrite,
119    EnvironmentManage,
120    Extension,
121    ExtensionManage,
122    ExtensionData,
123    ExtensionDataWrite,
124    Governance,
125    Gallery,
126    GalleryAcquire,
127    GalleryPublish,
128    GalleryManage,
129    GitHubConnections,
130    GitHubConnectionsManage,
131    Graph,
132    GraphManage,
133    Hooks,
134    HooksWrite,
135    HooksInteract,
136    Identity,
137    IdentityManage,
138    MachineGroupManage,
139    Notification,
140    NotificationWrite,
141    NotificationManage,
142    NotificationDiagnostics,
143    #[default]
144    Packaging,
145    PackagingManage,
146    PackagingWrite,
147    PipelineResourcesUse,
148    PipelineResourcesManage,
149    Profile,
150    Project,
151    ProjectWrite,
152    ProjectManage,
153    Release,
154    ReleaseExecute,
155    ReleaseManage,
156    SecureFilesRead,
157    SecureFilesWrite,
158    SecureFilesManage,
159    Security,
160    SecurityManage,
161    ServiceEndpoint,
162    ServiceEndpointQuery,
163    ServiceEndpointManage,
164    Settings,
165    SettingsWrite,
166    Symbols,
167    SymbolsWrite,
168    SymbolsManage,
169    TaskGroupsRead,
170    TaskGroupsWrite,
171    TaskGroupsManage,
172    Test,
173    TestWrite,
174    ThreadsFull,
175    Tokens,
176    TokensAdministration,
177    VariableGroupsRead,
178    VariableGroupsWrite,
179    VariableGroupsManage,
180    Wiki,
181    WikiWrite,
182    Work,
183    WorkWrite,
184    WorkFull,
185}