pub mod file;
pub mod process_local;
use core::{fmt::Debug, time::Duration};
use iceoryx2_bb_log::fail;
use iceoryx2_bb_system_types::file_name::*;
use crate::named_concept::{
NamedConcept, NamedConceptBuilder, NamedConceptConfiguration, NamedConceptMgmt,
};
#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)]
pub enum StaticStorageCreateError {
AlreadyExists,
Creation,
Write,
InsufficientPermissions,
InternalError,
}
#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)]
pub enum StaticStorageOpenError {
DoesNotExist,
Read,
InitializationNotYetFinalized,
InternalError,
}
#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)]
pub enum StaticStorageReadError {
BufferTooSmall,
ReadError,
StaticStorageWasModified,
CreationNotComplete,
}
#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)]
pub enum StaticStorageUnlockError {
InsufficientPermissions,
NoSpaceLeft,
InternalError,
}
pub trait StaticStorageConfiguration: Clone + Default + NamedConceptConfiguration {}
pub trait StaticStorageBuilder<T: StaticStorage>: Sized + NamedConceptBuilder<T> {
fn has_ownership(self, value: bool) -> Self;
fn create(self, contents: &[u8]) -> Result<T, StaticStorageCreateError> {
let locked_storage = self.create_locked()?;
Ok(
fail!(from "StaticStorageBuilder::create", when locked_storage.unlock(contents),
with StaticStorageCreateError::Write,
"Unable to unlock static storage with content"),
)
}
fn create_locked(self) -> Result<T::Locked, StaticStorageCreateError>;
fn open(self, timeout: Duration) -> Result<T, StaticStorageOpenError>;
}
pub trait StaticStorageLocked<T: StaticStorage>: Sized + NamedConcept {
fn unlock(self, contents: &[u8]) -> Result<T, StaticStorageUnlockError>;
}
pub trait StaticStorage: Debug + Sized + NamedConceptMgmt + NamedConcept {
type Builder: StaticStorageBuilder<Self> + NamedConceptBuilder<Self>;
type Locked: StaticStorageLocked<Self>;
fn len(&self) -> u64;
fn is_empty(&self) -> bool;
fn read(&self, content: &mut [u8]) -> Result<(), StaticStorageReadError>;
fn release_ownership(&mut self);
fn acquire_ownership(&mut self);
fn default_suffix() -> FileName {
unsafe { FileName::new_unchecked(b".static_storage") }
}
}