Struct Detector

Source
pub struct Detector<'a> { /* private fields */ }
Expand description

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"

Implementations§

Source§

impl<'a> Detector<'a>

Source

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

Create detector

§Examples
use text_reader::TextReader;

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

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

Detect next char

§Examples
use text_reader::TextReader;

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

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

Detect next string

§Examples
use text_reader::TextReader;

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

pub fn yes(&mut self) -> bool

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
Source

pub fn no(&mut self) -> bool

Detect result is false

Source

pub fn rollback(&mut self) -> &mut Self

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§

Source§

impl<'a> Debug for Detector<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for Detector<'a>

§

impl<'a> RefUnwindSafe for Detector<'a>

§

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

§

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

§

impl<'a> Unpin for Detector<'a>

§

impl<'a> !UnwindSafe for Detector<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.