Struct Span

struct Span<'i> { ... }

A span over a &str. It is created from either two Positions or from a Pair.

Implementations

impl<'i> Span<'i>

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

# use pest::Span;
let input = "Hello!";
assert_eq!(None, Span::new(input, 100, 0));
assert!(Span::new(input, 0, input.len()).is_some());
fn get<impl RangeBounds<usize>: RangeBounds<usize>>(self: &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

fn start(self: &Self) -> usize

Returns the Span's start byte position as a usize.

Examples

# use pest::Position;
let input = "ab";
let start = Position::from_start(input);
let end = start.clone();
let span = start.span(&end);

assert_eq!(span.start(), 0);
fn end(self: &Self) -> usize

Returns the Span's end byte position as a usize.

Examples

# use pest::Position;
let input = "ab";
let start = Position::from_start(input);
let end = start.clone();
let span = start.span(&end);

assert_eq!(span.end(), 0);
fn start_pos(self: &Self) -> Position<'i>

Returns the Span's start Position.

Examples

# use pest::Position;
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);
fn end_pos(self: &Self) -> Position<'i>

Returns the Span's end Position.

Examples

# use pest::Position;
let input = "ab";
let start = Position::from_start(input);
let end = start.clone();
let span = start.span(&end);

assert_eq!(span.end_pos(), end);
fn split(self: Self) -> (Position<'i>, Position<'i>)

Splits the Span into a pair of Positions.

Examples

# use pest::Position;
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));
fn as_str(self: &Self) -> &'i str

Captures a slice from the &str defined by the Span.

Examples

# use pest;
# #[allow(non_camel_case_types)]
# #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
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");
fn get_input(self: &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

# use pest;
# use pest::Span;

// 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);
fn lines(self: &Self) -> Lines<'_>

Iterates over all lines (partially) covered by this span. Yielding a &str for each line.

Examples

# use pest;
# #[allow(non_camel_case_types)]
# #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
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"]);
fn lines_span(self: &Self) -> LinesSpan<'_>

Iterates over all lines (partially) covered by this span. Yielding a Span for each line.

Examples

# use pest;
# use pest::Span;
# #[allow(non_camel_case_types)]
# #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
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()]);

impl<'i> Clone for Span<'i>

fn clone(self: &Self) -> Span<'i>

impl<'i> Copy for Span<'i>

impl<'i> Debug for Span<'i>

fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result

impl<'i> Eq for Span<'i>

impl<'i> Freeze for Span<'i>

impl<'i> Hash for Span<'i>

fn hash<H: Hasher>(self: &Self, state: &mut H)

impl<'i> PartialEq for Span<'i>

fn eq(self: &Self, other: &Span<'i>) -> bool

impl<'i> RefUnwindSafe for Span<'i>

impl<'i> Send for Span<'i>

impl<'i> Sync for Span<'i>

impl<'i> Unpin for Span<'i>

impl<'i> UnsafeUnpin for Span<'i>

impl<'i> UnwindSafe for Span<'i>

impl<T> Any for Span<'i>

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for Span<'i>

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for Span<'i>

fn borrow_mut(self: &mut Self) -> &mut T

impl<T> CloneToUninit for Span<'i>

unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)

impl<T> From for Span<'i>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for Span<'i>

fn to_owned(self: &Self) -> T
fn clone_into(self: &Self, target: &mut T)

impl<T, U> Into for Span<'i>

fn into(self: Self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom for Span<'i>

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto for Span<'i>

fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>