pub struct Span<'i> {
input: &'i str,
start: usize,
end: usize,
}
Expand description
A span over a &str
. It is created from either two Position
s or from a Pair
.
Fields§
§input: &'i str
§start: usize
§end: usize
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 Position
s.
§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()]);
Trait Implementations§
impl<'i> Copy for Span<'i>
impl<'i> Eq for Span<'i>
Auto Trait Implementations§
impl<'i> Freeze for Span<'i>
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> UnwindSafe for Span<'i>
Blanket Implementations§
Source§impl<T> AllocForAny<T> for T
impl<T> AllocForAny<T> for T
Source§fn galloc(self) -> &'static T
fn galloc(self) -> &'static T
Provides a method to allocate an instance of T
on the heap with a static lifetime.
This implementation of galloc
takes ownership of the T
instance and uses the alloc
function to place it in a location with a static lifetime, presumably managing it in a way that ensures its persistence for the duration of the program.
This can be particularly useful for scenarios where a static lifetime is required, such as when interfacing with systems or patterns that necessitate global state or long-lived data.
Source§fn galloc_mut(self) -> &'static T
fn galloc_mut(self) -> &'static T
Provides a method that moves the instance and returns a reference to it allocated with a static lifetime.
This method utilizes alloc_mut
to perform the allocation, likely involving allocating the resource in a manner that ensures it lives for the entire duration of the application.
These semantics allow the user to safely assume that the reference will not expire during the program’s execution, making it suitable for long-lived data structures or operations that require such guarantees.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more