forge_core/config/
function.rs1use std::time::Duration;
4
5use serde::{Deserialize, Serialize};
6
7use super::types::DurationStr;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
11#[non_exhaustive]
12pub struct FunctionConfig {
13 #[serde(default = "default_max_concurrent")]
15 pub max_concurrent: usize,
16
17 #[serde(default = "default_function_timeout")]
19 pub timeout: DurationStr,
20
21 #[serde(default = "default_memory_limit")]
29 pub memory_limit: String,
30}
31
32impl Default for FunctionConfig {
33 fn default() -> Self {
34 Self {
35 max_concurrent: default_max_concurrent(),
36 timeout: default_function_timeout(),
37 memory_limit: default_memory_limit(),
38 }
39 }
40}
41
42impl FunctionConfig {
43 pub fn memory_limit_bytes(&self) -> crate::Result<usize> {
45 crate::util::parse_size(&self.memory_limit).ok_or_else(|| {
46 crate::ForgeError::config(format!(
47 "invalid function.memory_limit '{}'. Expected a size like '512mb', '1gb', or '536870912'",
48 self.memory_limit
49 ))
50 })
51 }
52}
53
54fn default_max_concurrent() -> usize {
55 1000
56}
57
58fn default_function_timeout() -> DurationStr {
59 DurationStr::new(Duration::from_secs(30))
60}
61
62fn default_memory_limit() -> String {
63 "512mb".to_string()
64}