use std::sync::Arc;
use crate::mem::{Memory, MemoryShared};
#[derive(Clone, Debug)]
pub struct OpaqueMemory {
inner: Arc<dyn Memory + Send + Sync + 'static>,
}
impl OpaqueMemory {
#[must_use]
pub fn new(inner: impl MemoryShared) -> Self {
Self { inner: Arc::new(inner) }
}
#[must_use]
pub fn reserve(&self, min_bytes: usize) -> crate::BytesBuf {
self.inner.reserve(min_bytes)
}
}
impl Memory for OpaqueMemory {
#[cfg_attr(test, mutants::skip)] fn reserve(&self, min_bytes: usize) -> crate::BytesBuf {
self.reserve(min_bytes)
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use static_assertions::assert_impl_all;
use super::*;
use crate::mem::GlobalPool;
assert_impl_all!(OpaqueMemory: MemoryShared);
#[test]
fn wraps_inner() {
let provider = GlobalPool::new();
let memory = OpaqueMemory::new(provider);
let builder = memory.reserve(1024);
assert!(builder.capacity() >= 1024);
}
#[test]
fn memory_trait() {
let provider = GlobalPool::new();
let memory = OpaqueMemory::new(provider);
let builder = Memory::reserve(&memory, 1024);
assert!(builder.capacity() >= 1024);
}
}