use std::sync::atomic::{AtomicUsize, Ordering};
const DEFAULT_MAX_BYTES_PER_FILE: usize = 1_073_741_824;
const DEFAULT_MAX_VERTICES: usize = 10_000_000;
const DEFAULT_MAX_STRING_LENGTH: usize = 1_048_576;
const DEFAULT_MAX_LABEL_ENTRIES: usize = 10_000_000;
static MAX_BYTES_PER_FILE: AtomicUsize = AtomicUsize::new(DEFAULT_MAX_BYTES_PER_FILE);
static MAX_VERTICES: AtomicUsize = AtomicUsize::new(DEFAULT_MAX_VERTICES);
static MAX_STRING_LENGTH: AtomicUsize = AtomicUsize::new(DEFAULT_MAX_STRING_LENGTH);
static MAX_LABEL_ENTRIES: AtomicUsize = AtomicUsize::new(DEFAULT_MAX_LABEL_ENTRIES);
pub fn max_bytes_per_file() -> usize {
MAX_BYTES_PER_FILE.load(Ordering::Relaxed)
}
pub fn set_max_bytes_per_file(limit: usize) {
MAX_BYTES_PER_FILE.store(limit, Ordering::Relaxed);
}
pub fn max_vertices() -> usize {
MAX_VERTICES.load(Ordering::Relaxed)
}
pub fn set_max_vertices(limit: usize) {
MAX_VERTICES.store(limit, Ordering::Relaxed);
}
pub fn max_string_length() -> usize {
MAX_STRING_LENGTH.load(Ordering::Relaxed)
}
pub fn set_max_string_length(limit: usize) {
MAX_STRING_LENGTH.store(limit, Ordering::Relaxed);
}
pub fn max_label_entries() -> usize {
MAX_LABEL_ENTRIES.load(Ordering::Relaxed)
}
pub fn set_max_label_entries(limit: usize) {
MAX_LABEL_ENTRIES.store(limit, Ordering::Relaxed);
}
pub fn reset_limits_to_defaults() {
MAX_BYTES_PER_FILE.store(DEFAULT_MAX_BYTES_PER_FILE, Ordering::Relaxed);
MAX_VERTICES.store(DEFAULT_MAX_VERTICES, Ordering::Relaxed);
MAX_STRING_LENGTH.store(DEFAULT_MAX_STRING_LENGTH, Ordering::Relaxed);
MAX_LABEL_ENTRIES.store(DEFAULT_MAX_LABEL_ENTRIES, Ordering::Relaxed);
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn defaults_are_reasonable() {
assert_eq!(max_bytes_per_file(), 1_073_741_824); assert_eq!(max_vertices(), 10_000_000);
assert_eq!(max_string_length(), 1_048_576); assert_eq!(max_label_entries(), 10_000_000);
}
#[test]
fn limits_can_be_changed_and_reset() {
set_max_bytes_per_file(1024);
assert_eq!(max_bytes_per_file(), 1024);
set_max_vertices(100);
assert_eq!(max_vertices(), 100);
reset_limits_to_defaults();
assert_eq!(max_bytes_per_file(), 1_073_741_824);
assert_eq!(max_vertices(), 10_000_000);
}
}