Skip to main content

template_model/
span.rs

1use serde::{Deserialize, Serialize};
2
3/// A range in the source template. Lines and columns are 1-based.
4#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
5#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
6#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
7#[serde(rename_all = "camelCase")]
8pub struct SourceSpan {
9    pub start_line: u32,
10    pub start_column: u32,
11    pub end_line: u32,
12    pub end_column: u32,
13}
14
15pub const UNKNOWN_SPAN: SourceSpan =
16    SourceSpan { start_line: u32::MAX, start_column: u32::MAX, end_line: u32::MAX, end_column: u32::MAX };
17
18pub fn span_to_option(span: SourceSpan) -> Option<SourceSpan> {
19    if span == UNKNOWN_SPAN { None } else { Some(span) }
20}
21
22pub trait SpanProvider {
23    fn source_location(&self, path: &str) -> Option<SourceSpan>;
24}