use crate::{Site, Symbol};
#[derive(Copy, Clone)]
pub struct StaticSymbol(
) UB check in the
fn() -> &'static Site,
);
impl StaticSymbol {
#[must_use]
#[doc(hidden)]
pub const unsafe fn new_unchecked(f: fn() -> &'static Site) -> Self {
Self(f)
}
}
impl core::ops::Deref for StaticSymbol {
type Target = Symbol;
#[inline(always)]
fn deref(&self) -> &Self::Target {
unsafe {
self.0().get_ref_after_ctor()
}
}
}
impl core::borrow::Borrow<Symbol> for StaticSymbol {
#[inline]
fn borrow(&self) -> &Symbol {
self
}
}
impl AsRef<Symbol> for StaticSymbol {
#[inline]
fn as_ref(&self) -> &Symbol {
self
}
}
impl From<&StaticSymbol> for Symbol {
#[inline]
fn from(value: &StaticSymbol) -> Self {
**value
}
}
impl From<StaticSymbol> for Symbol {
#[inline]
fn from(value: StaticSymbol) -> Self {
*value
}
}
impl PartialEq<Symbol> for StaticSymbol {
#[inline]
fn eq(&self, other: &Symbol) -> bool {
**self == *other
}
}
impl PartialEq<StaticSymbol> for Symbol {
#[inline]
fn eq(&self, other: &StaticSymbol) -> bool {
*self == **other
}
}
impl PartialEq for StaticSymbol {
#[inline]
fn eq(&self, other: &Self) -> bool {
**self == **other
}
}
impl core::fmt::Debug for StaticSymbol {
#[inline]
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
core::fmt::Debug::fmt(&**self, f)
}
}
impl core::fmt::Display for StaticSymbol {
#[inline]
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
core::fmt::Display::fmt(&**self, f)
}
}