KO
|
EN
gitlite — search
Search
#php
#python
#javascript
#hacktoberfest
#ruby
#c-plus-plus
#library
#shell
#java
#dotfiles
#gui
#r
nom-bufreader
★ 14
Open GitHub ↗
BufReader adapter for nom parsers
Download README (.md)
Explore Similar Repositories
BUFR4
:
BUFR edition 4
bufrw
:
Buffer Reading and Writing
pdbufr
:
High-level BUFR interface for ecCodes
csv2bufr
:
Python package to transform CSV data into the WMO BUFR format
// repository documentation
Was this content helpful?
★ 0
(0 ratings)
Select Rating:
★
★
★
★
★
Submit Feedback
Recent Feedback
×
Download README
Do you want to download the
README.md
file for
nom-bufreader
?
Download (.md)
# nom-bufreader, adapters for BufReader around nom **/!\Work in progress, if you put it in production, you fix it/!\** With this crate, you can assemble a nom parser with a `BufReader` alternative, synchronous or asynchronous. Due to incompatible buffering strategies, [std::io::BufReader](https://doc.rust-lang.org/stable/std/io/struct.BufReader.html) and [futures::io::BufReader](https://docs.rs/futures/0.3.16/futures/io/struct.BufReader.html) cannot be used directly. This crate proovide compatible forks instead, in the `bufreader` and `async_bufreader` modules. It will hide for you the [Incomplete](https://docs.rs/nom/7.0.0/nom/enum.Err.html#variant.Incomplete) handling in nom for streaming parsers, retrying and refilling buffers automatically. ## Examples ### sync ```rust use nom_bufreader::bufreader::BufReader; use nom_bufreader::{Error, Parse}; use std::{net::TcpListener, str::from_utf8}; fn main() -> Result<(), Error<()>> { let listener = TcpListener::bind("127.0.0.1:8080")?; let mut i = BufReader::new(listener.incoming().next().unwrap()?); // method, space and path are nom parsers let m = i.parse(method)?; let _ = i.parse(space)?; let p = i.parse(path)?; println!("got method {}, path {}", m, p); Ok(()) } ``` ### async #### tokio ```rust use nom_bufreader::async_bufreader::BufReader; use nom_bufreader::{AsyncParse, Error}; use std::str::from_utf8; use tokio_util::compat::TokioAsyncReadCompatExt; use tokio::net::TcpListener; #[tokio::main] async fn main() -> Result<(), Error<()>> { let listener = TcpListener::bind("127.0.0.1:8080").await?; let mut i = BufReader::new(listener.accept().await?.0.compat()); let m = i.parse(method).await?; let _ = i.parse(space).await?; let p = i.parse(path).await?; println!("got method {}, path {}", m, p); Ok(()) } ``` #### async-std ```rust use nom_bufreader::async_bufreader::BufReader; use nom_bufreader::{AsyncParse, Error}; use std::str::from_utf8; use async_std::net::TcpListener; #[async_std::main] async fn main() -> Result<(), Error<()>> { let listener = TcpListener::bind("127.0.0.1:8080").await?; let mut i = BufReader::new(listener.accept().await?.0); let m = i.parse(method).await?; let _ = i.parse(space).await?; let p = i.parse(path).await?; println!("got method {}, path {}", m, p); Ok(()) } ```