use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ResourceQuota {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_concurrent_subagents: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_total_subagents: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_spawn_depth: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub memory_writes_per_window: Option<(u32, u64)>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_workflow_nodes: Option<usize>,
}
impl ResourceQuota {
pub fn is_open(&self) -> bool {
self.max_concurrent_subagents.is_none()
&& self.max_total_subagents.is_none()
&& self.max_spawn_depth.is_none()
&& self.memory_writes_per_window.is_none()
&& self.max_workflow_nodes.is_none()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_quota_is_open() {
assert!(ResourceQuota::default().is_open());
}
#[test]
fn any_set_limit_closes_the_quota() {
let q = ResourceQuota { max_concurrent_subagents: Some(2), ..Default::default() };
assert!(!q.is_open());
}
}