Name Description Size
buf.rs A buffer for constructing a string while avoiding heap allocation. 6187
ext.rs Extension traits. 1831
lib.rs `powerfmt` is a library that provides utilities for formatting values. Specifically, it makes it significantly easier to support filling to a minimum width with alignment, avoid heap allocation, and avoid repetitive calculations. 530
smart_display.rs Definition of [`SmartDisplay`] and its related items. [`SmartDisplay`] is a trait that allows authors to provide additional information to both the formatter and other users. This information is provided in the form of a metadata type. The only required piece of metadata is the width of the value. This is _before_ it is passed to the formatter (i.e. it does not include any padding added by the formatter). Other information can be stored in a custom metadata type as needed. This information may be made available to downstream users, but it is not required. This module contains the [`SmartDisplay`] and associated items. # Example ```rust use std::fmt; use powerfmt::ext::FormatterExt as _; use powerfmt::smart_display::{self, FormatterOptions, Metadata, SmartDisplay}; #[derive(Debug)] struct User { id: usize, } // If you try to use `UserMetadata` in the `SmartDisplay` implementation, you will get a // compiler error about a private type being used publicly. To avoid this, use this attribute to // declare a private metadata type. You shouldn't need to worry about how this works, but be // aware that any public fields or methods remain usable by downstream users. #[smart_display::private_metadata] struct UserMetadata { username: String, legal_name: String, } // This attribute can be applied to `SmartDisplay` implementations. It will generate an // implementation of `Display` that delegates to `SmartDisplay`, avoiding the need to write // boilerplate. #[smart_display::delegate] impl SmartDisplay for User { type Metadata = UserMetadata; fn metadata(&self, _: FormatterOptions) -> Metadata<'_, Self> { // This could be obtained from a database, for example. let legal_name = "John Doe".to_owned(); let username = "jdoe".to_owned(); // Note that this must be kept in sync with the implementation of `fmt_with_metadata`. let width = smart_display::padded_width_of!(username, " (", legal_name, ")",); Metadata::new( width, self, UserMetadata { username, legal_name, }, ) } // Use the now-generated metadata to format the value. Here we use the `pad_with_width` // method to use the alignment and desired width from the formatter. fn fmt_with_metadata( &self, f: &mut fmt::Formatter<'_>, metadata: Metadata<Self>, ) -> fmt::Result { f.pad_with_width( metadata.unpadded_width(), format_args!("{} ({})", metadata.username, metadata.legal_name), ) } } let user = User { id: 42 }; assert_eq!(user.to_string(), "jdoe (John Doe)"); assert_eq!(format!("{user:>20}"), " jdoe (John Doe)"); ``` 24289
smart_display_impls.rs Implementation of [`SmartDisplay`] for various types. 7157