use thiserror::Error as ThisError;
use crate::LogicalCoreId;
use crate::PhysicalCoreId;
#[derive(Debug, ThisError)]
pub enum CPUTopologyError {
#[error(transparent)]
RawHwlocError(#[from] hwlocality::errors::RawHwlocError),
#[error(transparent)]
TypeToDepthError(#[from] hwlocality::object::depth::TypeToDepthError),
#[error(transparent)]
CPUBindingError(#[from] hwlocality::cpu::binding::CpuBindingError),
#[error("topology allocation failed, probably not enough free memory")]
TopologyAllocationFailed,
#[error("physical core id {core_id} is too big to be represented as a signed int")]
LogicalCoreIdTooBig { core_id: LogicalCoreId },
#[error("physical cores not found")]
PhysicalCoresNotFound,
#[error("physical core with {core_id} id not found")]
PhysicalCoreNotFound { core_id: PhysicalCoreId },
#[error("logical cores for physical core with {core_id} id not found")]
LogicalCoresNotFound { core_id: PhysicalCoreId },
#[error("cpuset for a physical core with {core_id} not found")]
CPUSetNotFound { core_id: PhysicalCoreId },
}
impl CPUTopologyError {
pub fn physical_core_not_found(core_id: PhysicalCoreId) -> Self {
Self::PhysicalCoreNotFound { core_id }
}
pub fn logical_cores_not_found(core_id: PhysicalCoreId) -> Self {
Self::PhysicalCoreNotFound { core_id }
}
pub fn cpuset_not_found(core_id: PhysicalCoreId) -> Self {
Self::CPUSetNotFound { core_id }
}
pub fn logical_core_too_big(core_id: LogicalCoreId) -> Self {
Self::LogicalCoreIdTooBig { core_id }
}
}