diff options
Diffstat (limited to 'crates/typst-utils/src/lib.rs')
| -rw-r--r-- | crates/typst-utils/src/lib.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/crates/typst-utils/src/lib.rs b/crates/typst-utils/src/lib.rs index 4d5f8e0c..831b2374 100644 --- a/crates/typst-utils/src/lib.rs +++ b/crates/typst-utils/src/lib.rs @@ -83,6 +83,27 @@ impl<T: Clone> ArcExt<T> for Arc<T> { } } +/// Extra methods for [`Option`]. +pub trait OptionExt<T> { + /// Maps an `Option<T>` to `U` by applying a function to a contained value + /// (if `Some`) or returns a default (if `None`). + fn map_or_default<U: Default, F>(self, f: F) -> U + where + F: FnOnce(T) -> U; +} + +impl<T> OptionExt<T> for Option<T> { + fn map_or_default<U: Default, F>(self, f: F) -> U + where + F: FnOnce(T) -> U, + { + match self { + Some(x) => f(x), + None => U::default(), + } + } +} + /// Extra methods for [`[T]`](slice). pub trait SliceExt<T> { /// Split a slice into consecutive runs with the same key and yield for |
