feat: ergonomics for the SpanRange enum construction

This commit is contained in:
Jeremy Wall 2024-11-21 16:43:27 -05:00
parent 5d479bcaf1
commit 101a020a2a

View File

@ -50,6 +50,30 @@ pub enum SpanRange {
RangeFull(std::ops::RangeFull),
}
impl From<std::ops::Range<usize>> for SpanRange {
fn from(value: std::ops::Range<usize>) -> Self {
SpanRange::Range(value)
}
}
impl From<std::ops::RangeTo<usize>> for SpanRange {
fn from(value: std::ops::RangeTo<usize>) -> Self {
SpanRange::RangeTo(value)
}
}
impl From<std::ops::RangeFrom<usize>> for SpanRange {
fn from(value: std::ops::RangeFrom<usize>) -> Self {
SpanRange::RangeFrom(value)
}
}
impl From<std::ops::RangeFull> for SpanRange {
fn from(value: std::ops::RangeFull) -> Self {
SpanRange::RangeFull(value)
}
}
/// An input that can provide a span of a range of the input.
pub trait Span<O> {
fn span(&self, idx: SpanRange) -> O;