1#![cfg_attr(not(feature = "std"), no_std)]
2#![cfg_attr(has_portable_simd, feature(portable_simd))]
4#![warn(missing_docs)]
5#![warn(clippy::std_instead_of_core)]
6#![warn(clippy::std_instead_of_alloc)]
7#![allow(uncommon_codepoints)]
9#![doc = include_str!("../README.md")]
10
11#[cfg(feature = "alloc")]
12extern crate alloc;
13
14mod types;
16pub use types::*;
17
18mod write;
20pub use write::Write;
21
22mod impls;
24
25pub unsafe trait Facet<'facet>: 'facet {
37 const SHAPE: &'static Shape;
44}
45
46#[inline]
61pub const fn shape_of<'a, T: Facet<'a>>() -> &'static Shape {
62 T::SHAPE
63}
64
65#[doc(hidden)]
74#[allow(nonstandard_style)]
75pub mod 𝟋 {
76 pub use crate::Attr as 𝟋Attr;
78 pub use crate::Def as 𝟋Def;
79 pub use crate::DefaultSource as 𝟋DS;
80 pub use crate::EnumRepr as 𝟋ERpr;
81 pub use crate::EnumType as 𝟋ETy;
82 pub use crate::EnumTypeBuilder as 𝟋ETyB;
83 pub use crate::Facet as 𝟋Fct;
84 pub use crate::Field as 𝟋Fld;
85 pub use crate::FieldBuilder as 𝟋FldB;
86 pub use crate::FieldFlags as 𝟋FF;
87 pub use crate::HashProxy as 𝟋HP;
88 pub use crate::MarkerTraits as 𝟋Mt;
89 pub use crate::Repr as 𝟋Repr;
90 pub use crate::Shape as 𝟋Shp;
91 pub use crate::ShapeBuilder as 𝟋ShpB;
92 pub use crate::ShapeFlags as 𝟋ShpF;
93 pub use crate::ShapeRef as 𝟋ShpR;
94 pub use crate::StructKind as 𝟋Sk;
95 pub use crate::StructType as 𝟋STy;
96 pub use crate::StructTypeBuilder as 𝟋STyB;
97 pub use crate::Type as 𝟋Ty;
98 pub use crate::UserType as 𝟋UTy;
99 pub use crate::VTableDirect as 𝟋VtD;
100 pub use crate::VTableErased as 𝟋VtE;
101 pub use crate::Variance as 𝟋Vnc;
102 pub use crate::VarianceDesc as 𝟋VncD;
103 pub use crate::Variant as 𝟋Var;
104 pub use crate::VariantBuilder as 𝟋VarB;
105 pub use ::core::option::Option::None as 𝟋None;
106 pub use ::core::option::Option::Some as 𝟋Some;
107 pub use ::core::result::Result::Err as 𝟋Err;
108 pub use ::core::result::Result::Ok as 𝟋Ok;
109
110 pub use ::core::mem::forget as 𝟋forget;
112 pub use ::core::mem::transmute as 𝟋transmute;
113 pub use ::core::ptr::drop_in_place as 𝟋drop_in_place;
114
115 pub use crate::shape_of as 𝟋shp;
117
118 pub use crate::DeclId as 𝟋DId;
120 pub use crate::decl_id_hash as 𝟋dih;
121
122 pub const 𝟋NOAT: &[crate::FieldAttribute] = &[];
125 pub const 𝟋NODOC: &[&str] = &[];
127 pub const 𝟋NOFL: crate::FieldFlags = crate::FieldFlags::empty();
129 pub const 𝟋CV: crate::VarianceDesc = crate::VarianceDesc::BIVARIANT;
131
132 pub type 𝟋Ph<'a> = ::core::marker::PhantomData<*mut &'a ()>;
135
136 #[cfg(feature = "alloc")]
138 pub type 𝟋Str = ::alloc::string::String;
139
140 #[cfg(not(feature = "alloc"))]
143 pub type 𝟋Str = &'static str;
144
145 pub type 𝟋Result<T, E> = ::core::result::Result<T, E>;
147
148 pub const fn 𝟋drop_for<T>() -> unsafe fn(*mut T) {
151 ::core::ptr::drop_in_place::<T>
152 }
153
154 pub const fn 𝟋default_for<T: Default>() -> unsafe fn(*mut T) {
158 unsafe fn default_in_place<T: Default>(ptr: *mut T) {
159 unsafe { ptr.write(T::default()) };
160 }
161 default_in_place::<T>
162 }
163
164 pub const fn 𝟋clone_for<T: Clone>() -> unsafe fn(*const T, *mut T) {
169 unsafe fn clone_into<T: Clone>(src: *const T, dst: *mut T) {
170 unsafe { dst.write((*src).clone()) };
171 }
172 clone_into::<T>
173 }
174
175 pub const fn 𝟋indirect_drop_for<T>() -> unsafe fn(crate::OxPtrMut) {
180 unsafe fn drop_in_place<T>(ox: crate::OxPtrMut) {
181 unsafe { ::core::ptr::drop_in_place(ox.ptr().as_ptr::<T>() as *mut T) };
182 }
183 drop_in_place::<T>
184 }
185
186 pub const fn 𝟋indirect_default_for<T: Default>() -> unsafe fn(crate::OxPtrMut) {
188 unsafe fn default_in_place<T: Default>(ox: crate::OxPtrMut) {
189 unsafe { ox.ptr().as_uninit().put(T::default()) };
190 }
191 default_in_place::<T>
192 }
193
194 pub const fn 𝟋indirect_clone_for<T: Clone>() -> unsafe fn(crate::OxPtrConst, crate::OxPtrMut) {
196 unsafe fn clone_into<T: Clone>(src: crate::OxPtrConst, dst: crate::OxPtrMut) {
197 let src_val = unsafe { &*(src.ptr().as_byte_ptr() as *const T) };
198 unsafe { dst.ptr().as_uninit().put(src_val.clone()) };
199 }
200 clone_into::<T>
201 }
202
203 pub use crate::types::specialization::impls;
205 pub use crate::types::specialization::{
206 Spez, SpezCloneIntoNo, SpezCloneIntoYes, SpezDebugNo, SpezDebugYes, SpezDefaultInPlaceNo,
207 SpezDefaultInPlaceYes, SpezDisplayNo, SpezDisplayYes, SpezEmpty, SpezHashNo, SpezHashYes,
208 SpezOrdNo, SpezOrdYes, SpezParseNo, SpezParseYes, SpezPartialEqNo, SpezPartialEqYes,
209 SpezPartialOrdNo, SpezPartialOrdYes,
210 };
211}