use marked_yaml::Span as MarkedSpan;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Span {
pub start: usize,
pub end: usize,
}
impl Span {
pub fn new(start: usize, end: usize) -> Self {
Self { start, end }
}
pub fn from_marked(span: &MarkedSpan) -> Self {
let start = span.start().map(|marker| marker.character()).unwrap_or(0);
let end = span.end().map(|marker| marker.character()).unwrap_or(start);
let end = end.max(start.saturating_add(1));
Self { start, end }
}
}
impl From<Span> for std::ops::Range<usize> {
fn from(span: Span) -> Self {
span.start..span.end
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Spanned<T> {
pub value: T,
pub span: Span,
}
impl<T> Spanned<T> {
pub fn new(value: T, span: Span) -> Self {
Self { value, span }
}
}