pub struct Span<'i> { /* private fields */ }Expand description
A span over a &str. It is created from either two Positions or from a Pair.
Implementations§
Source§impl<'i> Span<'i>
impl<'i> Span<'i>
Sourcepub fn new(input: &str, start: usize, end: usize) -> Option<Span<'_>>
pub fn new(input: &str, start: usize, end: usize) -> Option<Span<'_>>
Attempts to create a new span. Will return None if input[start..end] is an invalid index
into input.
§Examples
let input = "Hello!";
assert_eq!(None, Span::new(input, 100, 0));
assert!(Span::new(input, 0, input.len()).is_some());Sourcepub fn get(&self, range: impl RangeBounds<usize>) -> Option<Span<'i>>
pub fn get(&self, range: impl RangeBounds<usize>) -> Option<Span<'i>>
Attempts to create a new span based on a sub-range.
use pest::Span;
let input = "Hello World!";
let world = Span::new(input, 6, input.len()).unwrap();
let orl = world.get(1..=3);
assert!(orl.is_some());
assert_eq!(orl.unwrap().as_str(), "orl");§Examples
Sourcepub fn start(&self) -> usize
pub fn start(&self) -> usize
Returns the Span’s start byte position as a usize.
§Examples
let input = "ab";
let start = Position::from_start(input);
let end = start.clone();
let span = start.span(&end);
assert_eq!(span.start(), 0);Sourcepub fn end(&self) -> usize
pub fn end(&self) -> usize
Returns the Span’s end byte position as a usize.
§Examples
let input = "ab";
let start = Position::from_start(input);
let end = start.clone();
let span = start.span(&end);
assert_eq!(span.end(), 0);Sourcepub fn start_pos(&self) -> Position<'i>
pub fn start_pos(&self) -> Position<'i>
Returns the Span’s start Position.
§Examples
let input = "ab";
let start = Position::from_start(input);
let end = start.clone();
let span = start.clone().span(&end);
assert_eq!(span.start_pos(), start);Sourcepub fn end_pos(&self) -> Position<'i>
pub fn end_pos(&self) -> Position<'i>
Returns the Span’s end Position.
§Examples
let input = "ab";
let start = Position::from_start(input);
let end = start.clone();
let span = start.span(&end);
assert_eq!(span.end_pos(), end);Sourcepub fn split(self) -> (Position<'i>, Position<'i>)
pub fn split(self) -> (Position<'i>, Position<'i>)
Splits the Span into a pair of Positions.
§Examples
let input = "ab";
let start = Position::from_start(input);
let end = start.clone();
let span = start.clone().span(&end);
assert_eq!(span.split(), (start, end));Sourcepub fn as_str(&self) -> &'i str
pub fn as_str(&self) -> &'i str
Captures a slice from the &str defined by the Span.
§Examples
enum Rule {}
let input = "abc";
let mut state: Box<pest::ParserState<'_, Rule>> = pest::ParserState::new(input).skip(1).unwrap();
let start_pos = state.position().clone();
state = state.match_string("b").unwrap();
let span = start_pos.span(&state.position().clone());
assert_eq!(span.as_str(), "b");Sourcepub fn get_input(&self) -> &'i str
pub fn get_input(&self) -> &'i str
Returns the input string of the Span.
This function returns the input string of the Span as a &str. This is the source string
from which the Span was created. The returned &str can be used to examine the contents of
the Span or to perform further processing on the string.
§Examples
// Example: Get input string from a span
let input = "abc\ndef\nghi";
let span = Span::new(input, 1, 7).unwrap();
assert_eq!(span.get_input(), input);Sourcepub fn lines(&self) -> Lines<'_> ⓘ
pub fn lines(&self) -> Lines<'_> ⓘ
Iterates over all lines (partially) covered by this span. Yielding a &str for each line.
§Examples
enum Rule {}
let input = "a\nb\nc";
let mut state: Box<pest::ParserState<'_, Rule>> = pest::ParserState::new(input).skip(2).unwrap();
let start_pos = state.position().clone();
state = state.match_string("b\nc").unwrap();
let span = start_pos.span(&state.position().clone());
assert_eq!(span.lines().collect::<Vec<_>>(), vec!["b\n", "c"]);Sourcepub fn lines_span(&self) -> LinesSpan<'_> ⓘ
pub fn lines_span(&self) -> LinesSpan<'_> ⓘ
Iterates over all lines (partially) covered by this span. Yielding a Span for each line.
§Examples
enum Rule {}
let input = "a\nb\nc";
let mut state: Box<pest::ParserState<'_, Rule>> = pest::ParserState::new(input).skip(2).unwrap();
let start_pos = state.position().clone();
state = state.match_string("b\nc").unwrap();
let span = start_pos.span(&state.position().clone());
assert_eq!(span.lines_span().collect::<Vec<_>>(), vec![Span::new(input, 2, 4).unwrap(), Span::new(input, 4, 5).unwrap()]);