#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodecLimits {
pub max_entities_create: usize,
pub max_entities_update: usize,
pub max_entities_destroy: usize,
pub max_components_per_entity: usize,
pub max_fields_per_component: usize,
pub max_section_bytes: usize,
pub max_total_entities_after_apply: usize,
}
impl Default for CodecLimits {
fn default() -> Self {
Self {
max_entities_create: 1024,
max_entities_update: 2048,
max_entities_destroy: 1024,
max_components_per_entity: 64,
max_fields_per_component: 64,
max_section_bytes: 64 * 1024,
max_total_entities_after_apply: 4096,
}
}
}
impl CodecLimits {
#[must_use]
pub const fn for_testing() -> Self {
Self {
max_entities_create: 32,
max_entities_update: 64,
max_entities_destroy: 32,
max_components_per_entity: 16,
max_fields_per_component: 16,
max_section_bytes: 4096,
max_total_entities_after_apply: 128,
}
}
#[must_use]
pub const fn unlimited() -> Self {
Self {
max_entities_create: usize::MAX,
max_entities_update: usize::MAX,
max_entities_destroy: usize::MAX,
max_components_per_entity: usize::MAX,
max_fields_per_component: usize::MAX,
max_section_bytes: usize::MAX,
max_total_entities_after_apply: usize::MAX,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_limits_are_reasonable() {
let limits = CodecLimits::default();
assert!(limits.max_entities_create >= 128);
assert!(limits.max_section_bytes >= 1024);
}
#[test]
fn testing_limits_smaller() {
let test_limits = CodecLimits::for_testing();
let default_limits = CodecLimits::default();
assert!(test_limits.max_entities_create < default_limits.max_entities_create);
assert!(test_limits.max_section_bytes < default_limits.max_section_bytes);
}
#[test]
fn unlimited_limits() {
let limits = CodecLimits::unlimited();
assert_eq!(limits.max_entities_create, usize::MAX);
assert_eq!(limits.max_section_bytes, usize::MAX);
}
}