use std::time::Duration;
use crate::error::Result;
mod mem;
pub use mem::MemStorage;
#[cfg(unix)]
mod shm;
#[cfg(unix)]
pub use shm::ShmStorage;
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
mod wasm;
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
pub use wasm::SharedArrayBufferStorage;
pub trait Storage {
fn read_at(&self, buf: &mut [u8], offset: u64) -> Result<()>;
fn write_at(&self, buf: &[u8], offset: u64) -> Result<()>;
fn size(&self) -> u64;
fn close(self) -> Result<()>;
fn load_u32_at(&self, offset: u64) -> Result<u32> {
let mut buf = [0u8; 4];
self.read_at(&mut buf, offset)?;
Ok(u32::from_le_bytes(buf))
}
fn store_u32_at(&self, offset: u64, value: u32) -> Result<()> {
self.write_at(&value.to_le_bytes(), offset)
}
fn supports_wait(&self) -> bool {
false
}
fn wait_u32_at(&self, _offset: u64, _old: u32, _timeout: Option<Duration>) {}
}