phlow_runtime/settings/
mod.rs

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    // analyzer
25    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    // envs
35    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}