Skip to main content

Source

Trait Source 

Source
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
  • Different error handling requirements

All offsets exposed by this trait are simple text ranges from the start of this source.

Required Methods§

Source

fn length(&self) -> usize

Get the length of this source.

This represents the total size of this source in bytes.

Source

fn chunk_at(&self, offset: usize) -> TextChunk<'_>

Returns a text chunk containing the specified offset.

Source

fn get_text_in(&self, range: Range<usize>) -> Cow<'_, str>

Get the text content at the specified range.

The range is specified as simple offsets from the start of this source. The returned text should have any character encoding transformations already applied (e.g., Unicode escapes decoded, HTML entities resolved).

§Arguments
  • range - The byte range to extract text from (relative to this source)
§Returns

The text content in the specified range.

Provided Methods§

Source

fn source_id(&self) -> Option<SourceId>

Returns the ID of this source, if available.

Source

fn is_empty(&self) -> bool

Check if the source is empty.

Source

fn get_char_at(&self, offset: usize) -> Option<char>

Get a single character at the specified 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

Source

fn get_text_from(&self, offset: usize) -> Cow<'_, str>

Get the text from the current position to the end of the source.

§Arguments
  • offset - The byte offset to start from (relative to this source)
§Returns

The remaining text from the offset to the end.

Source

fn find_char_from(&self, offset: usize, ch: char) -> Option<usize>

Find the next occurrence of a character starting from an offset.

§Arguments
  • offset - The byte offset to start searching from (relative to this source)
  • ch - The character to search for
§Returns

The offset of the next occurrence, or None if not found

Source

fn find_str_from(&self, offset: usize, pattern: &str) -> Option<usize>

Find the next occurrence of a substring starting from an offset.

§Arguments
  • offset - The byte offset to start searching from (relative to this source)
  • pattern - The substring to search for
§Returns

The offset of the next occurrence, or None if not found

Source

fn syntax_error(&self, message: String, offset: usize) -> OakError

Create a syntax error with location information.

§Arguments
  • message - The error message
  • offset - The byte offset where the error occurred
§Returns

An OakError with precise location information.

Implementations on Foreign Types§

Source§

impl Source for str

Source§

fn length(&self) -> usize

Source§

fn chunk_at(&self, offset: usize) -> TextChunk<'_>

Source§

fn get_text_in(&self, range: Range<usize>) -> Cow<'_, str>

Source§

impl<S: Source + ?Sized> Source for &S

Source§

fn length(&self) -> usize

Source§

fn chunk_at(&self, offset: usize) -> TextChunk<'_>

Source§

fn get_text_in(&self, range: Range<usize>) -> Cow<'_, str>

Source§

fn source_id(&self) -> Option<SourceId>

Source§

fn get_char_at(&self, offset: usize) -> Option<char>

Source§

fn get_text_from(&self, offset: usize) -> Cow<'_, str>

Source§

fn find_char_from(&self, offset: usize, ch: char) -> Option<usize>

Source§

fn find_str_from(&self, offset: usize, pattern: &str) -> Option<usize>

Source§

fn syntax_error(&self, message: String, offset: usize) -> OakError

Implementors§