somen_decode/
ascii.rs

1use somen::prelude::*;
2
3/// An ASCII encoded [`u8`] decoder.
4///
5/// # Examples
6/// ```
7/// # futures_executor::block_on(async {
8/// # use somen_decode::ascii;
9/// use somen::prelude::*;
10///
11/// let mut parser = ascii();
12/// let mut stream = stream::from_slice(b"A$\n\x00\xA2");
13///
14/// assert_eq!(parser.parse(&mut stream).await, Ok('A'));
15/// assert_eq!(parser.parse(&mut stream).await, Ok('$'));
16/// assert_eq!(parser.parse(&mut stream).await, Ok('\n'));
17/// assert_eq!(parser.parse(&mut stream).await, Ok('\x00'));
18/// assert!(parser.parse(&mut stream).await.is_err());
19/// # });
20/// ```
21pub fn ascii<'a, I>() -> impl Parser<I, Output = char>
22where
23    I: Positioned<Ok = u8> + ?Sized + 'a,
24{
25    is_some(|c| if c <= 0x7F { Some(c as char) } else { None }).expect("ascii character")
26}