Struct scanner_rust::Scanner
source · pub struct Scanner<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True> = U256> { /* private fields */ }
Expand description
A simple text scanner which can parse primitive types and strings using UTF-8.
Implementations§
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
source§impl<N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<File, N>
impl<N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<File, N>
sourcepub fn scan_path2<P: AsRef<Path>>(
path: P
) -> Result<Scanner<File, N>, ScannerError>
pub fn scan_path2<P: AsRef<Path>>( path: P ) -> Result<Scanner<File, N>, ScannerError>
Create a scanner to read data from a file by its path and set the buffer size via generics.
use scanner_rust::{generic_array::typenum::U1024, Scanner};
let mut sc: Scanner<_, U1024> = Scanner::scan_path2("Cargo.toml").unwrap();
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
sourcepub unsafe fn remove_heading_bytes_from_buffer(
&mut self,
number_of_bytes: usize
)
pub unsafe fn remove_heading_bytes_from_buffer( &mut self, number_of_bytes: usize )
Left shift (if necessary) the buffer to remove bytes from the start of the buffer. Typically, you should use this after peek
ing the buffer.
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
sourcepub fn next_char(&mut self) -> Result<Option<char>, ScannerError>
pub fn next_char(&mut self) -> Result<Option<char>, ScannerError>
Read the next char. If the data is not a correct char, it will return a Ok(Some(REPLACEMENT_CHARACTER))
which is �. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("5 c 中文".as_bytes());
assert_eq!(Some('5'), sc.next_char().unwrap());
assert_eq!(Some(' '), sc.next_char().unwrap());
assert_eq!(Some('c'), sc.next_char().unwrap());
assert_eq!(Some(' '), sc.next_char().unwrap());
assert_eq!(Some('中'), sc.next_char().unwrap());
assert_eq!(Some('文'), sc.next_char().unwrap());
assert_eq!(None, sc.next_char().unwrap());
sourcepub fn next_line(&mut self) -> Result<Option<String>, ScannerError>
pub fn next_line(&mut self) -> Result<Option<String>, ScannerError>
Read the next line but not include the tailing line character (or line chracters like CrLf
(\r\n
)). If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some("123 456".into()), sc.next_line().unwrap());
assert_eq!(Some("789 ".into()), sc.next_line().unwrap());
assert_eq!(Some("".into()), sc.next_line().unwrap());
assert_eq!(Some(" 中文 ".into()), sc.next_line().unwrap());
sourcepub fn next_line_raw(&mut self) -> Result<Option<Vec<u8>>, ScannerError>
pub fn next_line_raw(&mut self) -> Result<Option<Vec<u8>>, ScannerError>
Read the next line include the tailing line character (or line chracters like CrLf
(\r\n
)) without fully validating UTF-8. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some("123 456".into()), sc.next_line_raw().unwrap());
assert_eq!(Some("789 ".into()), sc.next_line_raw().unwrap());
assert_eq!(Some("".into()), sc.next_line_raw().unwrap());
assert_eq!(Some(" 中文 ".into()), sc.next_line_raw().unwrap());
sourcepub fn drop_next_line(&mut self) -> Result<Option<usize>, ScannerError>
pub fn drop_next_line(&mut self) -> Result<Option<usize>, ScannerError>
Drop the next line but not include the tailing line character (or line chracters like CrLf
(\r\n
)). If there is nothing to read, it will return Ok(None)
. If there are something to read, it will return Ok(Some(i))
. The i
is the length of the dropped line.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some(7), sc.drop_next_line().unwrap());
assert_eq!(Some("789 ".into()), sc.next_line().unwrap());
assert_eq!(Some(0), sc.drop_next_line().unwrap());
assert_eq!(Some(" 中文 ".into()), sc.next_line().unwrap());
assert_eq!(None, sc.drop_next_line().unwrap());
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
sourcepub fn skip_whitespaces(&mut self) -> Result<bool, ScannerError>
pub fn skip_whitespaces(&mut self) -> Result<bool, ScannerError>
Skip the next whitespaces (javaWhitespace
). If there is nothing to read, it will return Ok(false)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2 c".as_bytes());
assert_eq!(Some('1'), sc.next_char().unwrap());
assert_eq!(Some(' '), sc.next_char().unwrap());
assert_eq!(Some('2'), sc.next_char().unwrap());
assert_eq!(true, sc.skip_whitespaces().unwrap());
assert_eq!(Some('c'), sc.next_char().unwrap());
assert_eq!(false, sc.skip_whitespaces().unwrap());
sourcepub fn next(&mut self) -> Result<Option<String>, ScannerError>
pub fn next(&mut self) -> Result<Option<String>, ScannerError>
Read the next token separated by whitespaces. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some("123".into()), sc.next().unwrap());
assert_eq!(Some("456".into()), sc.next().unwrap());
assert_eq!(Some("789".into()), sc.next().unwrap());
assert_eq!(Some("中文".into()), sc.next().unwrap());
assert_eq!(None, sc.next().unwrap());
sourcepub fn next_raw(&mut self) -> Result<Option<Vec<u8>>, ScannerError>
pub fn next_raw(&mut self) -> Result<Option<Vec<u8>>, ScannerError>
Read the next token separated by whitespaces without fully validating UTF-8. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some("123".into()), sc.next_raw().unwrap());
assert_eq!(Some("456".into()), sc.next_raw().unwrap());
assert_eq!(Some("789".into()), sc.next_raw().unwrap());
assert_eq!(Some("中文".into()), sc.next_raw().unwrap());
assert_eq!(None, sc.next_raw().unwrap());
sourcepub fn drop_next(&mut self) -> Result<Option<usize>, ScannerError>
pub fn drop_next(&mut self) -> Result<Option<usize>, ScannerError>
Drop the next token separated by whitespaces. If there is nothing to read, it will return Ok(None)
. If there are something to read, it will return Ok(Some(i))
. The i
is the length of the dropped line.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some(3), sc.drop_next().unwrap());
assert_eq!(Some("456".into()), sc.next().unwrap());
assert_eq!(Some(3), sc.drop_next().unwrap());
assert_eq!(Some("中文".into()), sc.next().unwrap());
assert_eq!(None, sc.drop_next().unwrap());
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
sourcepub fn next_bytes(
&mut self,
max_number_of_bytes: usize
) -> Result<Option<Vec<u8>>, ScannerError>
pub fn next_bytes( &mut self, max_number_of_bytes: usize ) -> Result<Option<Vec<u8>>, ScannerError>
Read the next bytes. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some("123".into()), sc.next_bytes(3).unwrap());
assert_eq!(Some(" 456".into()), sc.next_bytes(4).unwrap());
assert_eq!(Some("\r\n789 ".into()), sc.next_bytes(6).unwrap());
assert_eq!(Some("中文".into()), sc.next_raw().unwrap());
assert_eq!(Some(" ".into()), sc.next_bytes(2).unwrap());
assert_eq!(None, sc.next_bytes(2).unwrap());
sourcepub fn drop_next_bytes(
&mut self,
max_number_of_bytes: usize
) -> Result<Option<usize>, ScannerError>
pub fn drop_next_bytes( &mut self, max_number_of_bytes: usize ) -> Result<Option<usize>, ScannerError>
Drop the next N bytes. If there is nothing to read, it will return Ok(None)
. If there are something to read, it will return Ok(Some(i))
. The i
is the length of the actually dropped bytes.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some(7), sc.drop_next_bytes(7).unwrap());
assert_eq!(Some("".into()), sc.next_line().unwrap());
assert_eq!(Some("789 ".into()), sc.next_line().unwrap());
assert_eq!(Some(1), sc.drop_next_bytes(1).unwrap());
assert_eq!(Some(" 中文 ".into()), sc.next_line().unwrap());
assert_eq!(None, sc.drop_next_bytes(1).unwrap());
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
sourcepub fn next_until<S: AsRef<str>>(
&mut self,
boundary: S
) -> Result<Option<String>, ScannerError>
pub fn next_until<S: AsRef<str>>( &mut self, boundary: S ) -> Result<Option<String>, ScannerError>
Read the next text until it reaches a specific boundary. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some("123".into()), sc.next_until(" ").unwrap());
assert_eq!(Some("456\r".into()), sc.next_until("\n").unwrap());
assert_eq!(Some("78".into()), sc.next_until("9 ").unwrap());
assert_eq!(Some("\n\n 中文 ".into()), sc.next_until("kk").unwrap());
assert_eq!(None, sc.next().unwrap());
sourcepub fn next_until_raw<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<Vec<u8>>, ScannerError>
pub fn next_until_raw<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<Vec<u8>>, ScannerError>
Read the next data until it reaches a specific boundary without fully validating UTF-8. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some("123".into()), sc.next_until_raw(" ").unwrap());
assert_eq!(Some("456\r".into()), sc.next_until_raw("\n").unwrap());
assert_eq!(Some("78".into()), sc.next_until_raw("9 ").unwrap());
assert_eq!(Some("\n\n 中文 ".into()), sc.next_until_raw("kk").unwrap());
assert_eq!(None, sc.next().unwrap());
sourcepub fn drop_next_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<usize>, ScannerError>
pub fn drop_next_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<usize>, ScannerError>
Drop the next data until it reaches a specific boundary. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!(Some(7), sc.drop_next_until("\r\n").unwrap());
assert_eq!(Some("789 ".into()), sc.next_line().unwrap());
assert_eq!(Some(0), sc.drop_next_until("\n").unwrap());
assert_eq!(Some(" 中文 ".into()), sc.next_line().unwrap());
assert_eq!(None, sc.drop_next_until("").unwrap());
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
sourcepub fn peek(&mut self, shift: bool) -> Result<&[u8], ScannerError>
pub fn peek(&mut self, shift: bool) -> Result<&[u8], ScannerError>
Try to fill up the buffer and return the immutable byte slice of the valid buffered data.
If the shift
parameter is set to false
, the guaranteed minimum data length of the result is 32 (if the unread data is long enough), otherwise it is BUFFER_SIZE
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("123 456\r\n789 \n\n 中文 ".as_bytes());
assert_eq!("123 456\r\n789 \n\n 中文 ".as_bytes(), sc.peek(false).unwrap());
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
sourcepub fn next_u8(&mut self) -> Result<Option<u8>, ScannerError>
pub fn next_u8(&mut self) -> Result<Option<u8>, ScannerError>
Read the next token separated by whitespaces and parse it to a u8
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u8().unwrap());
assert_eq!(Some(2), sc.next_u8().unwrap());
sourcepub fn next_u16(&mut self) -> Result<Option<u16>, ScannerError>
pub fn next_u16(&mut self) -> Result<Option<u16>, ScannerError>
Read the next token separated by whitespaces and parse it to a u16
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u16().unwrap());
assert_eq!(Some(2), sc.next_u16().unwrap());
sourcepub fn next_u32(&mut self) -> Result<Option<u32>, ScannerError>
pub fn next_u32(&mut self) -> Result<Option<u32>, ScannerError>
Read the next token separated by whitespaces and parse it to a u32
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u32().unwrap());
assert_eq!(Some(2), sc.next_u32().unwrap());
sourcepub fn next_u64(&mut self) -> Result<Option<u64>, ScannerError>
pub fn next_u64(&mut self) -> Result<Option<u64>, ScannerError>
Read the next token separated by whitespaces and parse it to a u64
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u64().unwrap());
assert_eq!(Some(2), sc.next_u64().unwrap());
sourcepub fn next_u128(&mut self) -> Result<Option<u128>, ScannerError>
pub fn next_u128(&mut self) -> Result<Option<u128>, ScannerError>
Read the next token separated by whitespaces and parse it to a u128
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u128().unwrap());
assert_eq!(Some(2), sc.next_u128().unwrap());
sourcepub fn next_usize(&mut self) -> Result<Option<usize>, ScannerError>
pub fn next_usize(&mut self) -> Result<Option<usize>, ScannerError>
Read the next token separated by whitespaces and parse it to a usize
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_usize().unwrap());
assert_eq!(Some(2), sc.next_usize().unwrap());
sourcepub fn next_i8(&mut self) -> Result<Option<i8>, ScannerError>
pub fn next_i8(&mut self) -> Result<Option<i8>, ScannerError>
Read the next token separated by whitespaces and parse it to a i8
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i8().unwrap());
assert_eq!(Some(2), sc.next_i8().unwrap());
sourcepub fn next_i16(&mut self) -> Result<Option<i16>, ScannerError>
pub fn next_i16(&mut self) -> Result<Option<i16>, ScannerError>
Read the next token separated by whitespaces and parse it to a i16
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i16().unwrap());
assert_eq!(Some(2), sc.next_i16().unwrap());
sourcepub fn next_i32(&mut self) -> Result<Option<i32>, ScannerError>
pub fn next_i32(&mut self) -> Result<Option<i32>, ScannerError>
Read the next token separated by whitespaces and parse it to a i32
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i32().unwrap());
assert_eq!(Some(2), sc.next_i32().unwrap());
sourcepub fn next_i64(&mut self) -> Result<Option<i64>, ScannerError>
pub fn next_i64(&mut self) -> Result<Option<i64>, ScannerError>
Read the next token separated by whitespaces and parse it to a i64
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i64().unwrap());
assert_eq!(Some(2), sc.next_i64().unwrap());
sourcepub fn next_i128(&mut self) -> Result<Option<i128>, ScannerError>
pub fn next_i128(&mut self) -> Result<Option<i128>, ScannerError>
Read the next token separated by whitespaces and parse it to a i128
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i128().unwrap());
assert_eq!(Some(2), sc.next_i128().unwrap());
sourcepub fn next_isize(&mut self) -> Result<Option<isize>, ScannerError>
pub fn next_isize(&mut self) -> Result<Option<isize>, ScannerError>
Read the next token separated by whitespaces and parse it to a isize
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_isize().unwrap());
assert_eq!(Some(2), sc.next_isize().unwrap());
sourcepub fn next_f32(&mut self) -> Result<Option<f32>, ScannerError>
pub fn next_f32(&mut self) -> Result<Option<f32>, ScannerError>
Read the next token separated by whitespaces and parse it to a f32
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2.5".as_bytes());
assert_eq!(Some(1.0), sc.next_f32().unwrap());
assert_eq!(Some(2.5), sc.next_f32().unwrap());
sourcepub fn next_f64(&mut self) -> Result<Option<f64>, ScannerError>
pub fn next_f64(&mut self) -> Result<Option<f64>, ScannerError>
Read the next token separated by whitespaces and parse it to a f64
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2.5".as_bytes());
assert_eq!(Some(1.0), sc.next_f64().unwrap());
assert_eq!(Some(2.5), sc.next_f64().unwrap());
source§impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
impl<R: Read, N: ArrayLength + IsGreaterOrEqual<U4, Output = True>> Scanner<R, N>
sourcepub fn next_u8_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<u8>, ScannerError>
pub fn next_u8_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<u8>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a u8
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u8_until(" ").unwrap());
assert_eq!(Some(2), sc.next_u8_until(" ").unwrap());
sourcepub fn next_u16_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<u16>, ScannerError>
pub fn next_u16_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<u16>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a u16
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u16_until(" ").unwrap());
assert_eq!(Some(2), sc.next_u16_until(" ").unwrap());
sourcepub fn next_u32_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<u32>, ScannerError>
pub fn next_u32_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<u32>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a u32
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u32_until(" ").unwrap());
assert_eq!(Some(2), sc.next_u32_until(" ").unwrap());
sourcepub fn next_u64_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<u64>, ScannerError>
pub fn next_u64_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<u64>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a u64
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u64_until(" ").unwrap());
assert_eq!(Some(2), sc.next_u64_until(" ").unwrap());
sourcepub fn next_u128_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<u128>, ScannerError>
pub fn next_u128_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<u128>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a u128
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_u128_until(" ").unwrap());
assert_eq!(Some(2), sc.next_u128_until(" ").unwrap());
sourcepub fn next_usize_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<usize>, ScannerError>
pub fn next_usize_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<usize>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a usize
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_usize_until(" ").unwrap());
assert_eq!(Some(2), sc.next_usize_until(" ").unwrap());
sourcepub fn next_i8_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<i8>, ScannerError>
pub fn next_i8_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<i8>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a i8
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_usize_until(" ").unwrap());
assert_eq!(Some(2), sc.next_usize_until(" ").unwrap());
sourcepub fn next_i16_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<i16>, ScannerError>
pub fn next_i16_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<i16>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a i16
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i16_until(" ").unwrap());
assert_eq!(Some(2), sc.next_i16_until(" ").unwrap());
sourcepub fn next_i32_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<i32>, ScannerError>
pub fn next_i32_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<i32>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a i32
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i32_until(" ").unwrap());
assert_eq!(Some(2), sc.next_i32_until(" ").unwrap());
sourcepub fn next_i64_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<i64>, ScannerError>
pub fn next_i64_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<i64>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a i64
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i64_until(" ").unwrap());
assert_eq!(Some(2), sc.next_i64_until(" ").unwrap());
sourcepub fn next_i128_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<i128>, ScannerError>
pub fn next_i128_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<i128>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a i128
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_i128_until(" ").unwrap());
assert_eq!(Some(2), sc.next_i128_until(" ").unwrap());
sourcepub fn next_isize_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<isize>, ScannerError>
pub fn next_isize_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<isize>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a isize
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2".as_bytes());
assert_eq!(Some(1), sc.next_isize_until(" ").unwrap());
assert_eq!(Some(2), sc.next_isize_until(" ").unwrap());
sourcepub fn next_f32_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<f32>, ScannerError>
pub fn next_f32_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<f32>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a f32
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2.5".as_bytes());
assert_eq!(Some(1.0), sc.next_f32_until(" ").unwrap());
assert_eq!(Some(2.5), sc.next_f32_until(" ").unwrap());
sourcepub fn next_f64_until<D: ?Sized + AsRef<[u8]>>(
&mut self,
boundary: &D
) -> Result<Option<f64>, ScannerError>
pub fn next_f64_until<D: ?Sized + AsRef<[u8]>>( &mut self, boundary: &D ) -> Result<Option<f64>, ScannerError>
Read the next text until it reaches a specific boundary and parse it to a f64
value. If there is nothing to read, it will return Ok(None)
.
use scanner_rust::Scanner;
let mut sc = Scanner::new("1 2.5".as_bytes());
assert_eq!(Some(1.0), sc.next_f64_until(" ").unwrap());
assert_eq!(Some(2.5), sc.next_f64_until(" ").unwrap());