1use std::path::PathBuf;
11
12use clap::ValueEnum;
13
14#[derive(clap::Parser, Clone, Debug)]
15pub struct SecretsReaderCliArgs {
16 #[structopt(long, value_enum, env = "SECRETS_READER")]
18 pub secrets_reader: SecretsControllerKind,
19 #[structopt(
22 long,
23 required_if_eq("secrets_reader", "local-file"),
24 env = "SECRETS_READER_LOCAL_FILE_DIR"
25 )]
26 pub secrets_reader_local_file_dir: Option<PathBuf>,
27 #[structopt(
30 long,
31 required_if_eq("secrets_reader", "kubernetes"),
32 env = "SECRETS_READER_KUBERNETES_CONTEXT"
33 )]
34 pub secrets_reader_kubernetes_context: Option<String>,
35 #[structopt(
37 long,
38 required_if_eq("secrets_reader", "aws-secrets-manager"),
39 env = "SECRETS_READER_AWS_PREFIX"
40 )]
41 pub secrets_reader_aws_prefix: Option<String>,
42 #[structopt(long, env = "SECRETS_READER_NAME_PREFIX")]
45 pub secrets_reader_name_prefix: Option<String>,
46}
47
48#[derive(ValueEnum, Debug, Clone, Copy)]
49pub enum SecretsControllerKind {
50 LocalFile,
51 Kubernetes,
52 AwsSecretsManager,
53}
54
55impl SecretsReaderCliArgs {
56 pub fn to_flags(&self) -> Vec<String> {
60 match self.secrets_reader {
61 SecretsControllerKind::LocalFile => {
62 vec![
63 "--secrets-reader=local-file".to_string(),
64 format!(
65 "--secrets-reader-local-file-dir={}",
66 self.secrets_reader_local_file_dir
67 .as_ref()
68 .expect("initialized correctly")
69 .display()
70 ),
71 ]
72 }
73 SecretsControllerKind::Kubernetes => {
74 vec![
75 "--secrets-reader=kubernetes".to_string(),
76 format!(
77 "--secrets-reader-kubernetes-context={}",
78 self.secrets_reader_kubernetes_context
79 .as_ref()
80 .expect("initialized correctly")
81 ),
82 ]
83 }
84 SecretsControllerKind::AwsSecretsManager => {
85 vec![
86 "--secrets-reader=aws-secrets-manager".to_string(),
87 format!(
88 "--secrets-reader-aws-prefix={}",
89 self.secrets_reader_aws_prefix
90 .as_ref()
91 .expect("initialized correctly")
92 ),
93 ]
94 }
95 }
96 }
97}