From 15302dbe7a6bd04125c4a56fee24bbbacfb4cc2f Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 19 Jun 2025 17:21:00 +0200 Subject: [PATCH] Add `typst_utils::display` --- crates/typst-utils/src/lib.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/crates/typst-utils/src/lib.rs b/crates/typst-utils/src/lib.rs index abe6423df..4cfe0c046 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) -> impl Display +where + F: Fn(&mut Formatter) -> std::fmt::Result, +{ + struct Wrapper(F); + + impl Display for Wrapper + 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(value: &T) -> u128 { let mut state = SipHasher13::new();