pub struct PWrapper<T>(pub T);
Available on crate feature fmt only.
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

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

Writes a u8 with Display formatting.

Writes a u8 with Debug formatting.

Writes a u16 with Display formatting.

Writes a u16 with Debug formatting.

Writes a u32 with Display formatting.

Writes a u32 with Debug formatting.

Writes a u64 with Display formatting.

Writes a u64 with Debug formatting.

Writes a u128 with Display formatting.

Writes a u128 with Debug formatting.

Writes a usize with Display formatting.

Writes a usize with Debug formatting.

Writes a i8 with Display formatting.

Writes a i8 with Debug formatting.

Writes a i16 with Display formatting.

Writes a i16 with Debug formatting.

Writes a i32 with Display formatting.

Writes a i32 with Debug formatting.

Writes a i64 with Display formatting.

Writes a i64 with Debug formatting.

Writes a i128 with Display formatting.

Writes a i128 with Debug formatting.

Writes a isize with Display formatting.

Writes a isize with Debug formatting.

For constructing from a reference to an array.

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

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.

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 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.

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

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

This method is only available with the “assert” feature.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

What kind of type this is, this can be one of: Read more

The type after dereferencing, implemented as type This = Self; for all non-reference types 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 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.