Struct pest::Span [−][src]
pub struct Span<'i> { /* fields omitted */ }A span over a &str. It is created from either two Positions or from a Pair.
Implementations
impl<'i> Span<'i>[src]
impl<'i> Span<'i>[src]pub fn new(input: &str, start: usize, end: usize) -> Option<Span<'_>>[src]
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());
pub fn start(&self) -> usize[src]
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);
pub fn end(&self) -> usize[src]
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);
pub fn start_pos(&self) -> Position<'i>[src]
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);
pub fn end_pos(&self) -> Position<'i>[src]
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);
pub fn split(self) -> (Position<'i>, Position<'i>)[src]
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));
pub fn as_str(&self) -> &'i str[src]
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");
pub fn lines(&self) -> Lines<'_>ⓘ[src]
Iterates over all lines (partially) covered by this span.
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"]);