Struct Shape

Source
#[non_exhaustive]
#[repr(C)]
pub struct Shape { pub id: ConstTypeId, pub layout: ShapeLayout, pub vtable: &'static ValueVTable, pub def: Def, pub type_params: &'static [TypeParam], pub doc: &'static [&'static str], pub attributes: &'static [ShapeAttribute], pub inner: Option<fn() -> &'static Shape>, }
Expand description

Schema for reflection of a type

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§id: ConstTypeId

Unique type identifier, provided by the compiler.

§layout: ShapeLayout

Size, alignment — enough to allocate a value of this type (but not initialize it.)

§vtable: &'static ValueVTable

Function pointers to perform various operations: print the full type name (with generic type parameters), use the Display implementation, the Debug implementation, build a default value, clone, etc.

There are more specific vtables in variants of Def

§def: Def

Further definition of the value: details for structs, enums, scalars, options, smart pointers, arrays, slices, tuples, etc.

This typically lists fields (with shapes and offsets), reprs, variants and contains vtables that let you perform other operations, like inserting into a map or fetching a value from a list.

§type_params: &'static [TypeParam]

Generic parameters for the shape

§doc: &'static [&'static str]

Doc comment lines, collected by facet-derive. Note that they tend to start with a space.

§attributes: &'static [ShapeAttribute]

Attributes that can be applied to a shape

§inner: Option<fn() -> &'static Shape>

As far as serialization and deserialization goes, we consider that this shape is a wrapper for that shape This is true for “newtypes” like NonZero<u8>, wrappers like Utf8PathBuf, smart pointers like Arc<T>, etc.

When this is set, deserialization takes that into account. For example, facet-json doesn’t expect:

{ “NonZero”: { “value”: 128 } }

It expects just

128

Same for Utf8PathBuf, which is parsed from and serialized to “just a string”.

See Wip’s innermost_shape function (and its support in put).

Implementations§

Source§

impl Shape

Source

pub const fn is(&'static self, characteristic: Characteristic) -> bool

Checks if a shape has the given characteristic.

Source

pub const fn is_send(&'static self) -> bool

Check if this shape implements the Send trait

Source

pub const fn is_sync(&'static self) -> bool

Check if this shape implements the Sync trait

Source

pub const fn is_copy(&'static self) -> bool

Check if this shape implements the Copy trait

Source

pub const fn is_eq(&'static self) -> bool

Check if this shape implements the Eq trait

Source

pub const fn is_clone(&'static self) -> bool

Check if this shape implements the Clone trait

Source

pub const fn is_display(&'static self) -> bool

Check if this shape implements the Display trait

Source

pub const fn is_debug(&'static self) -> bool

Check if this shape implements the Debug trait

Source

pub const fn is_partial_eq(&'static self) -> bool

Check if this shape implements the PartialEq trait

Source

pub const fn is_partial_ord(&'static self) -> bool

Check if this shape implements the PartialOrd trait

Source

pub const fn is_ord(&'static self) -> bool

Check if this shape implements the Ord trait

Source

pub const fn is_hash(&'static self) -> bool

Check if this shape implements the Hash trait

Source

pub const fn is_default(&'static self) -> bool

Check if this shape implements the Default trait

Source

pub const fn is_from_str(&'static self) -> bool

Check if this shape implements the FromStr trait

Source

pub fn write_type_name( &self, f: &mut Formatter<'_>, opts: TypeNameOpts, ) -> Result<(), Error>

Writes the name of this type to the given formatter

Source§

impl Shape

Source

pub const fn builder() -> ShapeBuilder

Returns a builder for shape

Source

pub const fn builder_for_sized<T>() -> ShapeBuilder

Returns a builder for a shape for some type T.

Source

pub fn is_type<Other>(&'static self) -> bool
where Other: Facet<'static>,

Check if this shape is of the given type

Source

pub fn assert_type<Other>(&'static self)
where Other: Facet<'static>,

Assert that this shape is of the given type, panicking if it’s not

Source

pub fn has_deny_unknown_fields_attr(&'static self) -> bool

Source

pub fn has_default_attr(&'static self) -> bool

Source

pub fn get_rename_all_attr(&'static self) -> Option<&'static str>

Source§

impl Shape

Source

pub fn is_shape(&'static self, other: &'static Shape) -> bool

Check if this shape is of the given type

Source

pub fn assert_shape(&'static self, other: &'static Shape)

Assert that this shape is equal to the given shape, panicking if it’s not

Source§

impl Shape

Source

pub fn allocate(&self) -> Result<PtrUninit<'static>, UnsizedError>

Heap-allocate a value of this shape

Source

pub unsafe fn deallocate_mut(&self, ptr: PtrMut<'_>) -> Result<(), UnsizedError>

Deallocate a heap-allocated value of this shape

§Safety
  • ptr must have been allocated using Self::allocate and be aligned for this shape.
  • ptr must point to a region that is not already deallocated.
Source

pub unsafe fn deallocate_uninit( &self, ptr: PtrUninit<'static>, ) -> Result<(), UnsizedError>

Deallocate a heap-allocated, uninitialized value of this shape.

§Safety
  • ptr must have been allocated using Self::allocate (or equivalent) for this shape.
  • ptr must not have been already deallocated.
  • ptr must be properly aligned for this shape.

Trait Implementations§

Source§

impl Clone for Shape

Source§

fn clone(&self) -> Shape

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Shape

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for Shape

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Hash for Shape

Source§

fn hash<H>(&self, state: &mut H)
where H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Shape

Source§

fn eq(&self, other: &Shape) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Shape

Source§

impl Eq for Shape

Auto Trait Implementations§

§

impl Freeze for Shape

§

impl RefUnwindSafe for Shape

§

impl Send for Shape

§

impl Sync for Shape

§

impl Unpin for Shape

§

impl UnwindSafe for Shape

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.