1use cgroup_memory::memory_available;
4
5use crate::error::BoxError;
6
7#[derive(Clone, Debug)]
12pub enum Threshold {
13 MinAvailableBytes(u64),
15}
16
17pub trait AvailableMemory
18where
19 Self: Clone + Send + 'static,
20{
21 fn available_memory(&self) -> Result<usize, BoxError>;
22}
23
24#[derive(Clone)]
26pub struct LinuxCgroupMemory;
27
28impl AvailableMemory for LinuxCgroupMemory {
29 fn available_memory(&self) -> Result<usize, BoxError> {
30 match memory_available() {
31 Ok(Some(m)) => Ok(m as usize),
32 Ok(None) => Err("Memory cannot be determined".into()),
33 Err(e) => Err(e.into()),
34 }
35 }
36}