1#[derive(Debug, Clone, PartialEq, Eq)]
5pub struct CodecLimits {
6 pub max_entities_create: usize,
8 pub max_entities_update: usize,
10 pub max_entities_destroy: usize,
12 pub max_components_per_entity: usize,
14 pub max_fields_per_component: usize,
16 pub max_section_bytes: usize,
18 pub max_total_entities_after_apply: usize,
20}
21
22impl Default for CodecLimits {
23 fn default() -> Self {
24 Self {
25 max_entities_create: 1024,
26 max_entities_update: 2048,
27 max_entities_destroy: 1024,
28 max_components_per_entity: 64,
29 max_fields_per_component: 64,
30 max_section_bytes: 64 * 1024,
31 max_total_entities_after_apply: 4096,
32 }
33 }
34}
35
36impl CodecLimits {
37 #[must_use]
39 pub const fn for_testing() -> Self {
40 Self {
41 max_entities_create: 32,
42 max_entities_update: 64,
43 max_entities_destroy: 32,
44 max_components_per_entity: 16,
45 max_fields_per_component: 16,
46 max_section_bytes: 4096,
47 max_total_entities_after_apply: 128,
48 }
49 }
50
51 #[must_use]
53 pub const fn unlimited() -> Self {
54 Self {
55 max_entities_create: usize::MAX,
56 max_entities_update: usize::MAX,
57 max_entities_destroy: usize::MAX,
58 max_components_per_entity: usize::MAX,
59 max_fields_per_component: usize::MAX,
60 max_section_bytes: usize::MAX,
61 max_total_entities_after_apply: usize::MAX,
62 }
63 }
64}
65
66#[cfg(test)]
67mod tests {
68 use super::*;
69
70 #[test]
71 fn default_limits_are_reasonable() {
72 let limits = CodecLimits::default();
73 assert!(limits.max_entities_create >= 128);
74 assert!(limits.max_section_bytes >= 1024);
75 }
76
77 #[test]
78 fn testing_limits_smaller() {
79 let test_limits = CodecLimits::for_testing();
80 let default_limits = CodecLimits::default();
81 assert!(test_limits.max_entities_create < default_limits.max_entities_create);
82 assert!(test_limits.max_section_bytes < default_limits.max_section_bytes);
83 }
84
85 #[test]
86 fn unlimited_limits() {
87 let limits = CodecLimits::unlimited();
88 assert_eq!(limits.max_entities_create, usize::MAX);
89 assert_eq!(limits.max_section_bytes, usize::MAX);
90 }
91}