[][src]Struct text_reader::Detector

pub struct Detector<'a> { /* fields omitted */ }

Text reader detector

Examples

use text_reader::TextReader;
use text_reader::Detector;

let text = r#""typeA""#;
let mut reader = TextReader::new(text);
let mut rets = Vec::new();
while reader.has_next() {
  match reader.next() {
    Some('"') => {
      let mut detector = reader.detector();
      rets.push('"');
      if detector.next_text("type").yes() {
        detector.rollback();
        rets.push('t');
      }
      continue;
    }
    Some(ch) => {
      rets.push(ch);
      continue;
    }
    None => {}
  }
}
let ret = rets.iter().collect::<String>();
println!("{}", ret); // "ttypeA"

Methods

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

pub fn new(reader: &'a mut TextReader) -> Self[src]

Create detector

Examples

use text_reader::TextReader;

let mut reader = TextReader::new("abc");

pub fn next_char(&mut self, ch: char) -> &mut Self[src]

Detect next char

Examples

use text_reader::TextReader;

let mut reader = TextReader::new("abc");
let mut detector = reader.detector();
detector.next_char('a');

pub fn next_text<S: AsRef<OsStr>>(&mut self, text: S) -> &mut Self[src]

Detect next string

Examples

use text_reader::TextReader;

let mut reader = TextReader::new("abc");
let mut detector = reader.detector();
detector.next_text("ab");

pub fn yes(&mut self) -> bool[src]

Detect result is true

Examples

use text_reader::TextReader;

let mut vec = Vec::new();
let mut reader = TextReader::new("abc");

while reader.has_next() {
  match reader.next() {
    Some(ch) => {
      let mut detector = reader.detector();
      if detector.next_text("bc").yes() {
        println!("Detect ab");
      }
      vec.push(ch);
    },
    None => {}
  }
}
println!("{}", vec.iter().collect::<String>()); // a

pub fn no(&mut self) -> bool[src]

Detect result is false

pub fn rollback(&mut self) -> &mut Self[src]

Rollback detector If detect success detector not back position. if want, use rollback function to reset reader position

Examples

use text_reader::TextReader;

let mut vec = Vec::new();

let mut reader = TextReader::new("abc");
while reader.has_next() {
  match reader.next() {
    Some(ch) => {
      let mut detector = reader.detector();
      if detector.next_text("bc").yes() {
        detector.rollback();
        println!("Detect ab");
      }
      vec.push(ch);
    },
    None => {}
  }
}
println!("{}", vec.iter().collect::<String>()); // abc

Trait Implementations

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

Auto Trait Implementations

impl<'a> Send for Detector<'a>

impl<'a> Sync for Detector<'a>

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]