summaryrefslogtreecommitdiff
path: root/crates/typst-utils
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2025-06-19 17:21:00 +0200
committerLaurenz <laurmaedje@gmail.com>2025-06-20 17:32:37 +0200
commit15302dbe7a6bd04125c4a56fee24bbbacfb4cc2f (patch)
tree21bbbf746cd2586e28335f7ca9b14aed9bd0c6f1 /crates/typst-utils
parent4580daf307cb1ba66458fb46d9442b1183731ec2 (diff)
Add `typst_utils::display`
Diffstat (limited to 'crates/typst-utils')
-rw-r--r--crates/typst-utils/src/lib.rs21
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();