1use cli::{Cli, Error};
2use envs::Envs;
3
4pub mod cli;
5pub mod envs;
6pub use cli::PrintOutput;
7
8#[derive(Debug, Clone)]
9pub struct Settings {
10 pub script_main_absolute_path: String,
11 pub only_download_modules: bool,
12 pub package_path: Option<String>,
13 pub package_target: String,
14 pub create_tar: bool,
15 pub no_run: bool,
16 pub download: bool,
17 pub print_yaml: bool,
18 pub print_output: PrintOutput,
19 pub test: bool,
20 pub test_filter: Option<String>,
21 pub var_main: Option<String>,
22 pub var_payload: Option<String>,
23 pub start_step: Option<String>,
24 pub analyzer: bool,
26 pub analyzer_files: bool,
27 pub analyzer_modules: bool,
28 pub analyzer_total_steps: bool,
29 pub analyzer_total_pipelines: bool,
30 pub analyzer_json: bool,
31 pub analyzer_inner: bool,
32 pub analyzer_all: bool,
33
34 pub package_consumer_count: i32,
36 #[cfg(target_env = "gnu")]
37 pub min_allocated_memory: usize,
38 #[cfg(target_env = "gnu")]
39 pub garbage_collection: bool,
40 #[cfg(target_env = "gnu")]
41 pub garbage_collection_interval: u64,
42 pub default_package_repository_url: String,
43}
44
45impl Settings {
46 pub fn try_load() -> Result<Self, Error> {
47 let cli = Cli::load()?;
48 let envs = Envs::load();
49
50 let main_target = cli.main_target.unwrap_or(envs.main.clone());
51
52 let current_path = std::env::current_dir()
53 .unwrap_or_else(|_| "./".into())
54 .to_string_lossy()
55 .to_string();
56
57 let script_main_absolute_path = if main_target.starts_with(".") {
58 format!("{}/{}", current_path, main_target)
59 } else {
60 main_target.clone()
61 };
62
63 let settings = Self {
64 script_main_absolute_path,
65 only_download_modules: cli.only_download_modules,
66 package_path: cli.package_path,
67 package_target: cli.package_target,
68 create_tar: cli.create_tar,
69 no_run: cli.no_run,
70 analyzer: cli.analyzer,
71 analyzer_files: cli.analyzer_files,
72 analyzer_modules: cli.analyzer_modules,
73 analyzer_total_steps: cli.analyzer_total_steps,
74 analyzer_total_pipelines: cli.analyzer_total_pipelines,
75 analyzer_json: cli.analyzer_json,
76 analyzer_inner: cli.analyzer_inner,
77 analyzer_all: cli.analyzer_all,
78 package_consumer_count: envs.package_consumer_count,
79 #[cfg(target_env = "gnu")]
80 min_allocated_memory: envs.min_allocated_memory,
81 #[cfg(target_env = "gnu")]
82 garbage_collection: envs.garbage_collection,
83 #[cfg(target_env = "gnu")]
84 garbage_collection_interval: envs.garbage_collection_interval,
85 default_package_repository_url: envs.default_package_repository_url,
86 download: cli.download,
87 print_yaml: cli.print_yaml,
88 print_output: cli.print_output,
89 test: cli.test,
90 test_filter: cli.test_filter,
91 var_main: cli.var_main,
92 var_payload: cli.var_payload,
93 start_step: cli.start_step,
94 };
95
96 Ok(settings)
97 }
98
99 pub fn for_runtime() -> Self {
100 let envs = Envs::load();
101
102 let current_path = std::env::current_dir()
103 .unwrap_or_else(|_| "./".into())
104 .to_string_lossy()
105 .to_string();
106
107 let main_target = envs.main.clone();
108 let script_main_absolute_path = if main_target.starts_with(".") {
109 format!("{}/{}", current_path, main_target)
110 } else {
111 main_target.clone()
112 };
113
114 Self {
115 script_main_absolute_path,
116 only_download_modules: false,
117 package_path: None,
118 package_target: "./phlow_packages".to_string(),
119 create_tar: false,
120 no_run: false,
121 download: true,
122 print_yaml: false,
123 print_output: PrintOutput::Yaml,
124 test: false,
125 test_filter: None,
126 var_main: None,
127 var_payload: None,
128 start_step: None,
129 analyzer: false,
130 analyzer_files: false,
131 analyzer_modules: false,
132 analyzer_total_steps: false,
133 analyzer_total_pipelines: false,
134 analyzer_json: false,
135 analyzer_inner: false,
136 analyzer_all: false,
137 package_consumer_count: envs.package_consumer_count,
138 #[cfg(target_env = "gnu")]
139 min_allocated_memory: envs.min_allocated_memory,
140 #[cfg(target_env = "gnu")]
141 garbage_collection: envs.garbage_collection,
142 #[cfg(target_env = "gnu")]
143 garbage_collection_interval: envs.garbage_collection_interval,
144 default_package_repository_url: envs.default_package_repository_url,
145 }
146 }
147}