diff options
| author | Laurenz <laurmaedje@gmail.com> | 2025-06-19 17:21:00 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2025-06-20 17:32:37 +0200 |
| commit | 15302dbe7a6bd04125c4a56fee24bbbacfb4cc2f (patch) | |
| tree | 21bbbf746cd2586e28335f7ca9b14aed9bd0c6f1 | |
| parent | 4580daf307cb1ba66458fb46d9442b1183731ec2 (diff) | |
Add `typst_utils::display`
| -rw-r--r-- | crates/typst-utils/src/lib.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/crates/typst-utils/src/lib.rs b/crates/typst-utils/src/lib.rs index abe6423d..4cfe0c04 100644 --- a/crates/typst-utils/src/lib.rs +++ b/crates/typst-utils/src/lib.rs @@ -23,7 +23,7 @@ pub use self::scalar::Scalar; #[doc(hidden)] pub use once_cell; -use std::fmt::{Debug, Formatter}; +use std::fmt::{Debug, Display, Formatter}; use std::hash::Hash; use std::iter::{Chain, Flatten, Rev}; use std::num::{NonZeroU32, NonZeroUsize}; @@ -52,6 +52,25 @@ where Wrapper(f) } +/// Turn a closure into a struct implementing [`Display`]. +pub fn display<F>(f: F) -> impl Display +where + F: Fn(&mut Formatter) -> std::fmt::Result, +{ + struct Wrapper<F>(F); + + impl<F> Display for Wrapper<F> + where + F: Fn(&mut Formatter) -> std::fmt::Result, + { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + self.0(f) + } + } + + Wrapper(f) +} + /// Calculate a 128-bit siphash of a value. pub fn hash128<T: Hash + ?Sized>(value: &T) -> u128 { let mut state = SipHasher13::new(); |
