use core::fmt::Debug;
pub use iceoryx2_bb_container::semantic_string::SemanticString;
use iceoryx2_bb_elementary_traits::testing::abandonable::Abandonable;
pub use iceoryx2_bb_system_types::file_name::FileName;
pub use crate::{
named_concept::NamedConcept, named_concept::NamedConceptBuilder,
named_concept::NamedConceptMgmt,
};
pub mod file_lock;
pub mod process_local;
pub mod recommended;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum State {
Alive,
Dead,
DoesNotExist,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MonitoringCreateTokenError {
InsufficientPermissions,
AlreadyExists,
SystemCorrupted,
InternalError,
}
impl core::fmt::Display for MonitoringCreateTokenError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "MonitoringCreateTokenError::{self:?}")
}
}
impl core::error::Error for MonitoringCreateTokenError {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MonitoringCreateCleanerError {
Interrupt,
InstanceStillAlive,
AlreadyOwnedByAnotherInstance,
IsBeingCleanedUpOrAnotherCleanerCrashedDuringCleanup,
DoesNotExist,
InternalError,
}
impl core::fmt::Display for MonitoringCreateCleanerError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "MonitoringCreateCleanerError::{self:?}")
}
}
impl core::error::Error for MonitoringCreateCleanerError {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MonitoringCreateMonitorError {
InsufficientPermissions,
Interrupt,
ConceptNameNotSupportedOnPlatform,
InternalError,
}
impl core::fmt::Display for MonitoringCreateMonitorError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "MonitoringCreateMonitorError::{self:?}")
}
}
impl core::error::Error for MonitoringCreateMonitorError {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MonitoringStateError {
Interrupt,
InsufficientPermissions,
InternalError,
}
impl core::fmt::Display for MonitoringStateError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "MonitoringStateError::{self:?}")
}
}
impl core::error::Error for MonitoringStateError {}
pub trait MonitoringToken: NamedConcept + Abandonable {}
pub trait MonitoringCleaner: NamedConcept + Abandonable {
fn relinquish(self);
}
pub trait MonitoringMonitor: NamedConcept {
fn state(&self) -> Result<State, MonitoringStateError>;
}
pub trait MonitoringBuilder<T: Monitoring>: NamedConceptBuilder<T> {
fn token(self) -> Result<T::Token, MonitoringCreateTokenError>;
fn monitor(self) -> Result<T::Monitor, MonitoringCreateMonitorError>;
fn cleaner(self) -> Result<T::Cleaner, MonitoringCreateCleanerError>;
}
pub trait Monitoring: NamedConceptMgmt + Sized {
type Token: MonitoringToken;
type Monitor: MonitoringMonitor;
type Cleaner: MonitoringCleaner;
type Builder: MonitoringBuilder<Self>;
fn default_suffix() -> FileName {
unsafe { FileName::new_unchecked(b".monitor") }
}
}