core::fmt

Trait Pointer

1.0.0 · source
pub trait Pointer {
    // Required method
    fn fmt(&self, f: &mut Formatter<'_>) -> Result;
}
Expand description

p formatting.

The Pointer trait should format its output as a memory location. This is commonly presented as hexadecimal.

For more information on formatters, see the module-level documentation.

§Examples

Basic usage with &i32:

let x = &42;

let address = format!("{x:p}"); // this produces something like '0x7f06092ac6d0'

Implementing Pointer on a type:

use std::fmt;

struct Length(i32);

impl fmt::Pointer for Length {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        // use `as` to convert to a `*const T`, which implements Pointer, which we can use

        let ptr = self as *const Self;
        fmt::Pointer::fmt(&ptr, f)
    }
}

let l = Length(42);

println!("l is in memory here: {l:p}");

let l_ptr = format!("{l:018p}");
assert_eq!(l_ptr.len(), 18);
assert_eq!(&l_ptr[..2], "0x");

Required Methods§

1.0.0 · source

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

Formats the value using the given formatter.

§Errors

This function should return Err if, and only if, the provided Formatter returns Err. String formatting is considered an infallible operation; this function only returns a Result because writing to the underlying stream might fail and it must provide a way to propagate the fact that an error has occurred back up the stack.

Implementors§

1.4.0 · source§

impl<F: FnPtr> Pointer for F

1.33.0 · source§

impl<Ptr: Pointer> Pointer for Pin<Ptr>

1.24.0 · source§

impl<T> Pointer for AtomicPtr<T>

1.0.0 · source§

impl<T: ?Sized> Pointer for *const T

1.0.0 · source§

impl<T: ?Sized> Pointer for *mut T

1.0.0 · source§

impl<T: ?Sized> Pointer for &T

1.0.0 · source§

impl<T: ?Sized> Pointer for &mut T

1.25.0 · source§

impl<T: ?Sized> Pointer for NonNull<T>