pub trait Source: Send + Sync {
// Required methods
fn length(&self) -> usize;
fn chunk_at(&self, offset: usize) -> TextChunk<'_>;
fn get_text_in(&self, range: Range<usize>) -> Cow<'_, str>;
// Provided methods
fn source_id(&self) -> Option<SourceId> { ... }
fn is_empty(&self) -> bool { ... }
fn get_char_at(&self, offset: usize) -> Option<char> { ... }
fn get_text_from(&self, offset: usize) -> Cow<'_, str> { ... }
fn find_char_from(&self, offset: usize, ch: char) -> Option<usize> { ... }
fn find_str_from(&self, offset: usize, pattern: &str) -> Option<usize> { ... }
fn syntax_error(&self, message: String, offset: usize) -> OakError { ... }
}Expand description
Trait for abstract text sources.
This trait provides a unified interface for different text sources that may have:
- Different character representations (Unicode escapes, HTML entities)
- Different internal storage formats (contiguous, chunked, ropes)
- Different error handling requirements
All offsets exposed by this trait are simple byte ranges from the start of this source.
Required Methods§
Provided Methods§
Sourcefn source_id(&self) -> Option<SourceId>
fn source_id(&self) -> Option<SourceId>
Returns a unique identifier for this source, if available.
Useful for associating diagnostics with specific files.
Sourcefn get_char_at(&self, offset: usize) -> Option<char>
fn get_char_at(&self, offset: usize) -> Option<char>
Returns the character at the specified byte offset.
This method should handle any character encoding transformations and return the actual character that would be seen by the parser.
§Arguments
offset- The byte offset from the start of this source.
§Returns
The character at the specified offset, or None if the offset is invalid.
Sourcefn get_text_from(&self, offset: usize) -> Cow<'_, str>
fn get_text_from(&self, offset: usize) -> Cow<'_, str>
Returns the text from the specified byte offset to the end of the source.
§Arguments
offset- The byte offset to start from.