openmina_node_common/service/archive/
config.rs1use bitflags::bitflags;
2use std::env;
3
4bitflags! {
5 #[derive(Debug, Clone, Default)]
6 pub struct ArchiveStorageOptions: u8 {
7 const ARCHIVER_PROCESS = 0b0001;
8 const LOCAL_PRECOMPUTED_STORAGE = 0b0010;
9 const GCP_PRECOMPUTED_STORAGE = 0b0100;
10 const AWS_PRECOMPUTED_STORAGE = 0b1000;
11 }
12}
13
14impl ArchiveStorageOptions {
15 pub fn is_enabled(&self) -> bool {
16 !self.is_empty()
17 }
18
19 pub fn requires_precomputed_block(&self) -> bool {
20 self.uses_aws_precomputed_storage()
21 || self.uses_gcp_precomputed_storage()
22 || self.uses_local_precomputed_storage()
23 }
24
25 pub fn validate_env_vars(&self) -> Result<(), String> {
26 if self.contains(ArchiveStorageOptions::ARCHIVER_PROCESS)
27 && env::var("OPENMINA_ARCHIVE_ADDRESS").is_err()
28 {
29 return Err(
30 "OPENMINA_ARCHIVE_ADDRESS is required when ARCHIVER_PROCESS is enabled".to_string(),
31 );
32 }
33
34 if self.uses_aws_precomputed_storage() {
35 if env::var("AWS_ACCESS_KEY_ID").is_err() {
36 return Err(
37 "AWS_ACCESS_KEY_ID is required when AWS_PRECOMPUTED_STORAGE is enabled"
38 .to_string(),
39 );
40 }
41 if env::var("AWS_SECRET_ACCESS_KEY").is_err() {
42 return Err(
43 "AWS_SECRET_ACCESS_KEY is required when AWS_PRECOMPUTED_STORAGE is enabled"
44 .to_string(),
45 );
46 }
47 if env::var("AWS_SESSION_TOKEN").is_err() {
48 return Err(
49 "AWS_SESSION_TOKEN is required when AWS_PRECOMPUTED_STORAGE is enabled"
50 .to_string(),
51 );
52 }
53
54 if env::var("AWS_DEFAULT_REGION").is_err() {
55 return Err(
56 "AWS_DEFAULT_REGION is required when AWS_PRECOMPUTED_STORAGE is enabled"
57 .to_string(),
58 );
59 }
60
61 if env::var("OPENMINA_AWS_BUCKET_NAME").is_err() {
62 return Err(
63 "OPENMINA_AWS_BUCKET_NAME is required when AWS_PRECOMPUTED_STORAGE is enabled"
64 .to_string(),
65 );
66 }
67
68 }
75
76 if self.uses_gcp_precomputed_storage() {
77 if env::var("GCP_CREDENTIALS_JSON").is_err() {
78 return Err(
79 "GCP_CREDENTIALS_JSON is required when GCP_PRECOMPUTED_STORAGE is enabled"
80 .to_string(),
81 );
82 }
83
84 if env::var("GCP_BUCKET_NAME").is_err() {
85 return Err(
86 "GCP_BUCKET_NAME is required when GCP_PRECOMPUTED_STORAGE is enabled"
87 .to_string(),
88 );
89 }
90 }
91
92 Ok(())
93 }
94
95 pub fn uses_local_precomputed_storage(&self) -> bool {
96 self.contains(ArchiveStorageOptions::LOCAL_PRECOMPUTED_STORAGE)
97 }
98
99 pub fn uses_archiver_process(&self) -> bool {
100 self.contains(ArchiveStorageOptions::ARCHIVER_PROCESS)
101 }
102
103 pub fn uses_gcp_precomputed_storage(&self) -> bool {
104 self.contains(ArchiveStorageOptions::GCP_PRECOMPUTED_STORAGE)
105 }
106
107 pub fn uses_aws_precomputed_storage(&self) -> bool {
108 self.contains(ArchiveStorageOptions::AWS_PRECOMPUTED_STORAGE)
109 }
110}