diff --git a/consumer/src/text.rs b/consumer/src/text.rs index 32aa12ad..6754afa6 100644 --- a/consumer/src/text.rs +++ b/consumer/src/text.rs @@ -501,6 +501,18 @@ pub enum RangePropertyValue { Mixed, } +impl RangePropertyValue> { + pub fn map( + self, + f: impl FnOnce(T) -> U, + ) -> RangePropertyValue> { + match self { + Self::Single(value) => RangePropertyValue::Single(value.map(f)), + Self::Mixed => RangePropertyValue::Mixed, + } + } +} + #[derive(Clone, Copy)] pub struct Range<'a> { pub(crate) node: Node<'a>, @@ -2287,4 +2299,21 @@ mod tests { let node = state.node_by_id(NodeId(1)).unwrap(); let _ = node.text_selection().unwrap(); } + + #[test] + fn range_property_value_map() { + use super::RangePropertyValue; + assert_eq!( + RangePropertyValue::Single(Some(0)).map(|x| x + 1), + RangePropertyValue::Single(Some(1)) + ); + assert_eq!( + RangePropertyValue::>::Single(None).map(|x| x + 1), + RangePropertyValue::Single(None) + ); + assert_eq!( + RangePropertyValue::>::Mixed.map(|x| x + 1), + RangePropertyValue::Mixed + ); + } }