WIP: libdelimiter #172
							
								
								
									
										8
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								Makefile
									
									
									
									
									
								
							@ -71,12 +71,16 @@ TESTS != printf '%s\n' "$(TESTFILES)" | xargs -n1 basename \
 | 
			
		||||
include $(TESTFILES)
 | 
			
		||||
 | 
			
		||||
.PHONY: test
 | 
			
		||||
test: all $(TESTS) /tmp/getopt
 | 
			
		||||
test: all $(TESTS) /tmp/delimit /tmp/getopt
 | 
			
		||||
	@echo $(TESTS)
 | 
			
		||||
	/tmp/delimit
 | 
			
		||||
	/tmp/getopt
 | 
			
		||||
 | 
			
		||||
/tmp/delimit: src/libdelimit.rs
 | 
			
		||||
	$(RUSTC) --test -o $@ src/libdelimit.rs
 | 
			
		||||
 | 
			
		||||
/tmp/getopt: src/libgetopt.rs
 | 
			
		||||
	$(RUSTC) --test -o /tmp/getopt src/libgetopt.rs
 | 
			
		||||
	$(RUSTC) --test -o $@ src/libgetopt.rs
 | 
			
		||||
 | 
			
		||||
.PHONY: docs
 | 
			
		||||
docs: docs/ build
 | 
			
		||||
 | 
			
		||||
@ -92,7 +92,7 @@ fn main() -> ExitCode {
 | 
			
		||||
		exit(usage(&argv[0]).into());
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	let stdin = Box::new(stdin().lock());
 | 
			
		||||
	let stdin = stdin().lock();
 | 
			
		||||
 | 
			
		||||
	let mut input = Delimited::new(stdin, d.clone().as_bytes());
 | 
			
		||||
	let mut n = 0;
 | 
			
		||||
 | 
			
		||||
@ -23,14 +23,14 @@ use std::{
 | 
			
		||||
 | 
			
		||||
const BUFFER_SIZE: usize = 4096;
 | 
			
		||||
 | 
			
		||||
pub struct Delimited {
 | 
			
		||||
    stream: Box<dyn Read>,
 | 
			
		||||
pub struct Delimited<T: Read> {
 | 
			
		||||
    delimiter: Vec<u8>,
 | 
			
		||||
    buffer: Vec<u8>
 | 
			
		||||
    buffer: Vec<u8>,
 | 
			
		||||
    stream: T,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Delimited {
 | 
			
		||||
	pub fn new(stream: Box<dyn Read>, delimiter: &[u8]) -> Self {
 | 
			
		||||
impl<T> Delimited<T> where T: Read {
 | 
			
		||||
	pub fn new(stream: T, delimiter: &[u8]) -> Self {
 | 
			
		||||
        Delimited {
 | 
			
		||||
            stream,
 | 
			
		||||
            delimiter: delimiter.to_vec(),
 | 
			
		||||
@ -39,7 +39,7 @@ impl Delimited {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Iterator for Delimited {
 | 
			
		||||
impl<T> Iterator for Delimited<T> where T: Read {
 | 
			
		||||
    type Item = Result<Vec<u8>>;
 | 
			
		||||
 | 
			
		||||
    fn next(&mut self) -> Option<Self::Item> {
 | 
			
		||||
@ -89,3 +89,23 @@ fn find_subslice(stack: &[u8], key: &[u8]) -> Option<usize> {
 | 
			
		||||
 | 
			
		||||
    None
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
	use Delimited;
 | 
			
		||||
 | 
			
		||||
	#[test]
 | 
			
		||||
	fn testing() {
 | 
			
		||||
		let d = '\u{1E}'.to_string();
 | 
			
		||||
| 
					
	
	
	
	
	
	
	
	 
					
					silt marked this conversation as resolved
					
				 
				 | 
			||||
		let input = vec!["meow", "woof", "ribbit"];
 | 
			
		||||
		let r = input.join(&d);
 | 
			
		||||
 | 
			
		||||
		let mut output = Delimited::new(r.as_bytes(), d.as_bytes());
 | 
			
		||||
 | 
			
		||||
		let mut i = 0;
 | 
			
		||||
		while let Some(item) = output.next() {
 | 
			
		||||
			assert_eq!(input[i].as_bytes(), item.unwrap());
 | 
			
		||||
			i += 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	
.to_string()is unnecessary here as aSeparatorcan be acharand.as_bytesis implemented forcharsnevermind i am the biggest fool