logo
pub struct PWrapper<T>(pub T);
Expand description

Wrapper for many std types, which implements the const_debug_fmt and/or const_display_fmt methods for them.

The macros from this crate automatically wraps std types in this type, so you only need to use it if you’re manually calling the const_*_fmt methods.

Constructors

Most std types can be wrapped in this type simply by doing PWrapper(value).

To wrap arrays, there is the PWrapper::slice constructor for convenience.

Excluded std types

Note that this type does not implement the formatting methods for std types which wrap non-std types, only for a selection of wrapped std types.

You can use the call_debug_fmt macro to format arrays/slices/Options of any type that can be const debug formatted.

Example

This example demonstrates how you can implement debug formatting for a type using PWrapper to write std types.

#![feature(const_mut_refs)]

use const_format::{Error, Formatter, PWrapper};
use const_format::{impl_fmt, formatc, try_};

use core::num::NonZeroU32;

pub struct Divide(pub u32, pub u32);

impl_fmt!{
    impl Divide;
     
    pub const fn const_debug_fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
        let Self(left, right) = *self;
        let divided = self.0 / self.1;

        let mut f = f.debug_struct("Divide");
        try_!(PWrapper(self.0).const_debug_fmt(f.field("numerator")));
        try_!(PWrapper(self.1).const_debug_fmt(f.field("denominator")));
        try_!(PWrapper(divided).const_debug_fmt(f.field("divided")));
        f.finish()
    }
}

const TEXT: &str = formatc!("{:?}", Divide(34, 11));
const T_HEX: &str = formatc!("{:x?}", Divide(34, 11));
const T_BIN: &str = formatc!("{:b?}", Divide(34, 11));

assert_eq!(TEXT, "Divide { numerator: 34, denominator: 11, divided: 3 }");
assert_eq!(T_HEX, "Divide { numerator: 22, denominator: B, divided: 3 }");
assert_eq!(T_BIN, "Divide { numerator: 100010, denominator: 1011, divided: 11 }");

Tuple Fields

0: T

Implementations

For constructing from a reference to an array.

With slices you can do PWrapper(slice) as well.

Returns the absolute value of this integer.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how much space is necessary to write the wrapped &[u8] as a utf8 string, with debug formatting

Computes how much space is necessary to write &self.0[range] as a utf8 string, with debug formatting

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Returns the absolute value of this integer, as the equivalent unsigned type.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Computes how long much space is necessary to write this integer as a literal.

Computes how long much space is necessary to write this integer as a literal.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Computes how long much space is necessary to write this integer as a literal.

Computes how long much space is necessary to write this integer as a literal.

Computes how long much space is necessary to write this integer as a hexadecimal literal.

Computes how long much space is necessary to write this integer as a binary literal.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The resulting type after obtaining ownership.

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

🔬 This is a nightly-only experimental API. (toowned_clone_into)

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

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.