#![forbid(unused_must_use)]
#![deny(clippy::all)]
#![deny(clippy::nursery)]
#![deny(clippy::pedantic)]
#![forbid(clippy::expect_used)]
#![forbid(clippy::unwrap_used)]
#![allow(clippy::inline_always)]
#![no_std]
pub mod raw;
pub mod ub;
pub mod traits;
#[repr(transparent)]
#[derive(Debug, Clone, Copy)]
pub struct BrinyError {
code: u8,
}
impl core::ops::BitOr<Self> for BrinyError {
type Output = Self;
fn bitor(self, rhs: Self) -> Self::Output {
self.add(rhs)
}
}
impl BrinyError {
const RESERVED_CODE: u8 = 0b00000000;
const INVALID_BITPATTERN_CODE: u8 = 0b00000001;
const SIZE_BOUND_FAILURE_CODE: u8 = 0b00000010;
const UNALIGNED_ACCESS_CODE: u8 = 0b00000100;
const BAD_BUFFER_CODE: u8 = 0b00001000;
pub const RESERVED: Self = Self::new(Self::RESERVED_CODE);
pub const INVALID_BITPATTERN: Self = Self::new(Self::INVALID_BITPATTERN_CODE);
pub const SIZE_BOUND_FAILURE: Self = Self::new(Self::SIZE_BOUND_FAILURE_CODE);
pub const UNALIGNED_ACCESS: Self = Self::new(Self::UNALIGNED_ACCESS_CODE);
pub const BAD_BUFFER: Self = Self::new(Self::BAD_BUFFER_CODE);
#[inline]
const fn new(code: u8) -> Self {
Self {
code
}
}
#[inline]
#[must_use]
pub const fn add(self, rhs: Self) -> Self {
Self {
code: (self.code | rhs.code),
}
}
#[inline]
pub const fn is_err(self) -> bool {
self.code != 0
}
#[inline]
pub const fn is_unaligned_access(self) -> bool {
(self.code & Self::UNALIGNED_ACCESS_CODE) != 0
}
#[inline]
pub const fn is_bad_buffer(self) -> bool {
(self.code & Self::BAD_BUFFER_CODE) != 0
}
#[inline]
pub const fn is_invalid_bitpattern(self) -> bool {
(self.code & Self::INVALID_BITPATTERN_CODE) != 0
}
#[inline]
pub const fn is_size_bound_failure(self) -> bool {
(self.code & Self::SIZE_BOUND_FAILURE_CODE) != 0
}
}
impl core::fmt::Display for BrinyError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> Result<(), core::fmt::Error> {
write!(f, "BrinyError:code={}", self.code)
}
}
impl core::error::Error for BrinyError {}
unsafe impl crate::traits::RawConvert for BrinyError {}
unsafe impl crate::traits::StableLayout for BrinyError {}
unsafe impl crate::traits::InteriorImmutable for BrinyError {}
unsafe impl crate::traits::Unaligned for BrinyError {}