summaryrefslogtreecommitdiff
path: root/src/lines_buffer.rs
diff options
context:
space:
mode:
authorMax Verevkin <maxxverrr@gmail.com>2022-04-04 16:53:49 +0300
committerMax Verevkin <maxxverrr@gmail.com>2022-04-04 16:53:49 +0300
commitb759c7ec2ac5411f7dd254bb19a20c27a166e7e2 (patch)
tree750b9143ed9af2c8582a5200841e18ab0598e9c5 /src/lines_buffer.rs
parent41b54360ff917a261d3f6f752e3c2c51edada773 (diff)
downloadi3bar-mango-b759c7ec2ac5411f7dd254bb19a20c27a166e7e2.tar.gz
dont use line buffering when using json protocol
Diffstat (limited to 'src/lines_buffer.rs')
-rw-r--r--src/lines_buffer.rs54
1 files changed, 0 insertions, 54 deletions
diff --git a/src/lines_buffer.rs b/src/lines_buffer.rs
deleted file mode 100644
index 7813ea2..0000000
--- a/src/lines_buffer.rs
+++ /dev/null
@@ -1,54 +0,0 @@
-use std::borrow::Cow;
-use std::io::{BufRead, BufReader, Read, Result};
-
-pub struct LinesBuffer<R> {
- reader: BufReader<R>,
- next_line: Vec<u8>,
-}
-
-impl<R: Read> LinesBuffer<R> {
- pub fn new(inner: R) -> Self {
- Self {
- reader: BufReader::new(inner),
- next_line: Vec::new(),
- }
- }
-
- pub fn fill_buf(&mut self) -> Result<()> {
- self.reader.fill_buf()?;
- Ok(())
- }
-
- pub fn inner(&self) -> &R {
- self.reader.get_ref()
- }
-}
-
-impl<R: Read> Iterator for &mut LinesBuffer<R> {
- type Item = String;
-
- fn next(&mut self) -> Option<Self::Item> {
- let pending = self.reader.buffer();
- let (result, used) = match memchr::memchr(b'\n', pending) {
- None => {
- self.next_line.extend_from_slice(pending);
- (None, pending.len())
- }
- Some(i) => {
- self.next_line.extend_from_slice(&pending[..i]);
- let line = from_utf8(&self.next_line);
- self.next_line.clear();
- (Some(line), i + 1)
- }
- };
- self.reader.consume(used);
- result
- }
-}
-
-fn from_utf8(bytes: &[u8]) -> String {
- match String::from_utf8_lossy(bytes) {
- Cow::Borrowed(s) => s.to_owned(),
- Cow::Owned(s) => s,
- }
-}