dagger_sdk/core/
config.rs1use crate::core::logger::DynLogger;
2use derive_builder::Builder;
3use std::path::PathBuf;
4
5#[derive(Builder)]
6#[builder(build_fn(private, name = "fallible_build"))]
7#[builder(setter(strip_option))]
8pub struct Config {
9 #[builder(default = "None")]
10 pub workdir_path: Option<PathBuf>,
12 #[builder(default = "None")]
13 pub config_path: Option<PathBuf>,
15 #[builder(default = "10000")]
16 pub timeout_ms: u64,
19 #[builder(default = "false")]
20 pub load_workspace_modules: bool,
22 #[builder(default = "None")]
23 pub execute_timeout_ms: Option<u64>,
26 #[builder(default = "None")]
27 pub logger: Option<DynLogger>,
29}
30
31impl ConfigBuilder {
32 pub fn build(&mut self) -> Config {
33 self.fallible_build()
34 .expect("all fields have default values")
35 }
36}
37
38impl Default for Config {
39 fn default() -> Self {
40 Self {
41 workdir_path: None,
42 config_path: None,
43 timeout_ms: 10 * 1000,
44 load_workspace_modules: false,
45 execute_timeout_ms: None,
46 logger: None,
47 }
48 }
49}
50
51impl Config {
52 pub fn new(
53 workdir_path: Option<PathBuf>,
54 config_path: Option<PathBuf>,
55 timeout_ms: Option<u64>,
56 execute_timeout_ms: Option<u64>,
57 logger: Option<DynLogger>,
58 ) -> Self {
59 Self {
60 workdir_path,
61 config_path,
62 timeout_ms: timeout_ms.unwrap_or(10 * 1000),
63 load_workspace_modules: false,
64 execute_timeout_ms,
65 logger,
66 }
67 }
68
69 pub fn builder() -> ConfigBuilder {
71 ConfigBuilder::default()
72 }
73}
74
75#[cfg(test)]
76mod tests {
77 use super::Config;
78
79 #[test]
80 fn default_timeout_is_10s() {
81 let cfg = Config::default();
82 assert_eq!(cfg.timeout_ms, 10 * 1000);
83 assert!(cfg.execute_timeout_ms.is_none());
84 }
85}