use std::time::Duration;
use serde::{Deserialize, Serialize};
use super::types::DurationStr;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct FunctionConfig {
#[serde(default = "default_max_concurrent")]
pub max_concurrent: usize,
#[serde(default = "default_function_timeout")]
pub timeout: DurationStr,
#[serde(default = "default_memory_limit")]
pub memory_limit: String,
}
impl Default for FunctionConfig {
fn default() -> Self {
Self {
max_concurrent: default_max_concurrent(),
timeout: default_function_timeout(),
memory_limit: default_memory_limit(),
}
}
}
impl FunctionConfig {
pub fn memory_limit_bytes(&self) -> crate::Result<usize> {
crate::util::parse_size(&self.memory_limit).ok_or_else(|| {
crate::ForgeError::config(format!(
"invalid function.memory_limit '{}'. Expected a size like '512mb', '1gb', or '536870912'",
self.memory_limit
))
})
}
}
fn default_max_concurrent() -> usize {
1000
}
fn default_function_timeout() -> DurationStr {
DurationStr::new(Duration::from_secs(30))
}
fn default_memory_limit() -> String {
"512mb".to_string()
}