lemma/limits.rs
1/// Limits to prevent abuse and enable predictable resource usage
2///
3/// These limits protect against malicious inputs while being generous enough
4/// for all legitimate use cases.
5#[derive(Debug, Clone)]
6pub struct ResourceLimits {
7 /// Maximum file size in bytes
8 /// Real usage: ~5KB, Limit: 5MB (1000x)
9 pub max_file_size_bytes: usize,
10
11 /// Maximum expression nesting depth
12 /// Real usage: ~3 levels, Limit: 100 (30x+)
13 pub max_expression_depth: usize,
14
15 /// Maximum size of a single fact value in bytes
16 /// Real usage: ~100 bytes, Limit: 1KB (10x)
17 /// Enables server pre-allocation for zero-allocation evaluation
18 pub max_fact_value_bytes: usize,
19}
20
21impl Default for ResourceLimits {
22 fn default() -> Self {
23 Self {
24 max_file_size_bytes: 5 * 1024 * 1024, // 5 MB
25 max_expression_depth: 100,
26 max_fact_value_bytes: 1024, // 1 KB
27 }
28 }
29}
30
31impl ResourceLimits {
32 /// Create a new ResourceLimits with default values
33 pub fn new() -> Self {
34 Self::default()
35 }
36}