Struct uwl::StringStream[][src]

pub struct StringStream<'a> {
    pub src: &'a str,
    pub line: usize,
    pub column: usize,
    // some fields omitted
}

A stream of chars. Handles both ASCII and Unicode.

Note

This stream returns chars as &strs. In instances like take_while, the &str refers to actual multi-char substrings (e.g "foo").

Fields

The source this stream operates on.

Current line.

Current column.

Methods

impl<'a> StringStream<'a>
[src]

Create a new stream from a source.

Fetch the current char.

Example

use uwl::StringStream;

let stream = StringStream::new("hello");

assert_eq!(stream.current(), Some("h"));

Advance to the next char

Example

use uwl::StringStream;

let mut stream = StringStream::new("hello");

assert_eq!(stream.current(), Some("h"));

stream.next();
assert_eq!(stream.current(), Some("e"));

Lookahead by x chars. Returns the char it landed on. This does not actually modify the order, it just needs to temporarily advance.

Example

use uwl::StringStream;

let mut stream = StringStream::new("hello");

assert_eq!(stream.current(), Some("h"));
assert_eq!(stream.peek(1), Some("e"));
assert_eq!(stream.current(), Some("h"));
assert_eq!(stream.peek(2), Some("l"));
assert_eq!(stream.current(), Some("h"));

Lookahead by x chars. Returns a substring up to the end it landed on. This does not actually modify the order, it just needs to temporarily advance.

Example

use uwl::StringStream;

let mut stream = StringStream::new("hello world");

assert_eq!(stream.current(), Some("h"));
assert_eq!(stream.peek_str(5), "hello");

for _ in 0..5 {
    stream.next();
}

assert_eq!(stream.next(), Some(" "));
assert_eq!(stream.peek_str(5), "world");
assert_eq!(stream.next(), Some("w"));
assert_eq!(stream.next(), Some("o"));
assert_eq!(stream.next(), Some("r"));
assert_eq!(stream.next(), Some("l"));
assert_eq!(stream.next(), Some("d"));

Consume while true.

Example

use uwl::StringStream;

// Import a few utility methods (for `is_alphabetic`)
use uwl::StrExt;

let mut stream = StringStream::new("hello");

assert_eq!(stream.current(), Some("h"));
assert_eq!(stream.take_while(|s| s.is_alphabetic()), "hello");
assert_eq!(stream.current(), None);

Consume until true.

Example

use uwl::StringStream;

let mut stream = StringStream::new("hello!");

assert_eq!(stream.current(), Some("h"));
assert_eq!(stream.take_until(|s| s == "!"), "hello");
assert_eq!(stream.current(), Some("!"));

Determines the end of the input.

Example

use uwl::StringStream;

let mut stream = StringStream::new("a");

assert!(!stream.at_end());
stream.next();
assert!(stream.at_end());
assert_eq!(stream.current(), None);

The "offset"; the start of the current char.

Example

use uwl::StringStream;

let mut stream = StringStream::new("a 🍆");

assert_eq!(stream.offset(), 0);
stream.next();
assert_eq!(stream.offset(), 1);
stream.next();
assert_eq!(stream.offset(), 2);
stream.next();
assert_eq!(stream.offset(), 6);

Set the offset. Panics if the offset is in the middle of a unicode character, or exceeds the length of the input.

Set the offset without any checks.

Trait Implementations

impl<'a> Debug for StringStream<'a>
[src]

Formats the value using the given formatter. Read more

impl<'a> Clone for StringStream<'a>
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Auto Trait Implementations

impl<'a> Send for StringStream<'a>

impl<'a> Sync for StringStream<'a>