pub struct Span { /* private fields */ }
Expand description
A span over a &str
. It is created from either two Position
s or from a Pair
.
Implementations§
Source§impl Span
impl Span
Sourcepub fn input(&self) -> &Arc<str>
pub fn input(&self) -> &Arc<str>
Get the original input that this Span
refers to without being indexed from start
to
end
.
Sourcepub unsafe fn new_unchecked(input: Arc<str>, start: usize, end: usize) -> Span
pub unsafe fn new_unchecked(input: Arc<str>, start: usize, end: usize) -> Span
Create a new Span
without checking invariants. (Checked with debug_assertions
.)
§Safety
input[start..end]
must be a valid subslice; that is, said indexing should not panic.
Sourcepub fn new(input: Arc<str>, start: usize, end: usize) -> Option<Span>
pub fn new(input: Arc<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: Arc<str> = Arc::from("Hello!");
assert_eq!(None, Span::new(input.clone(), 100, 0));
assert!(Span::new(input.clone(), 0, input.len()).is_some());
Sourcepub fn start(&self) -> usize
pub fn start(&self) -> usize
Returns the Span
’s start byte position as a usize
.
§Examples
let input: Arc<str> = Arc::from("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: Arc<str> = Arc::from("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
pub fn start_pos(&self) -> Position
Returns the Span
’s start Position
.
§Examples
let input: Arc<str> = Arc::from("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
pub fn end_pos(&self) -> Position
Returns the Span
’s end Position
.
§Examples
let input: Arc<str> = Arc::from("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, Position)
pub fn split(self) -> (Position, Position)
Splits the Span
into a pair of Position
s.
§Examples
let input: Arc<str> = Arc::from("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) -> &str
pub fn as_str(&self) -> &str
Captures a slice from the &str
defined by the Span
.
§Examples
enum Rule {}
let input: Arc<str> = Arc::from("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 lines(&self) -> Lines<'_> ⓘ
pub fn lines(&self) -> Lines<'_> ⓘ
Iterates over all lines (partially) covered by this span.
§Examples
enum Rule {}
let input: Arc<str> = Arc::from("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"]);
Trait Implementations§
impl Eq for Span
Auto Trait Implementations§
impl Freeze for Span
impl RefUnwindSafe for Span
impl Send for Span
impl Sync for Span
impl Unpin for Span
impl UnwindSafe for Span
Blanket Implementations§
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
Mutably borrows from an owned value. Read more