WIP: libdelimiter #172
							
								
								
									
										8
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								Makefile
									
									
									
									
									
								
							@ -71,12 +71,16 @@ TESTS != printf '%s\n' "$(TESTFILES)" | xargs -n1 basename \
 | 
				
			|||||||
include $(TESTFILES)
 | 
					include $(TESTFILES)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.PHONY: test
 | 
					.PHONY: test
 | 
				
			||||||
test: all $(TESTS) /tmp/getopt
 | 
					test: all $(TESTS) /tmp/delimit /tmp/getopt
 | 
				
			||||||
	@echo $(TESTS)
 | 
						@echo $(TESTS)
 | 
				
			||||||
 | 
						/tmp/delimit
 | 
				
			||||||
	/tmp/getopt
 | 
						/tmp/getopt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/tmp/delimit: src/libdelimit.rs
 | 
				
			||||||
 | 
						$(RUSTC) --test -o $@ src/libdelimit.rs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/tmp/getopt: src/libgetopt.rs
 | 
					/tmp/getopt: src/libgetopt.rs
 | 
				
			||||||
	$(RUSTC) --test -o /tmp/getopt src/libgetopt.rs
 | 
						$(RUSTC) --test -o $@ src/libgetopt.rs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.PHONY: docs
 | 
					.PHONY: docs
 | 
				
			||||||
docs: docs/ build
 | 
					docs: docs/ build
 | 
				
			||||||
 | 
				
			|||||||
@ -92,7 +92,7 @@ fn main() -> ExitCode {
 | 
				
			|||||||
		exit(usage(&argv[0]).into());
 | 
							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 input = Delimited::new(stdin, d.clone().as_bytes());
 | 
				
			||||||
	let mut n = 0;
 | 
						let mut n = 0;
 | 
				
			||||||
 | 
				
			|||||||
@ -23,14 +23,14 @@ use std::{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const BUFFER_SIZE: usize = 4096;
 | 
					const BUFFER_SIZE: usize = 4096;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Delimited {
 | 
					pub struct Delimited<T: Read> {
 | 
				
			||||||
    stream: Box<dyn Read>,
 | 
					 | 
				
			||||||
    delimiter: Vec<u8>,
 | 
					    delimiter: Vec<u8>,
 | 
				
			||||||
    buffer: Vec<u8>
 | 
					    buffer: Vec<u8>,
 | 
				
			||||||
 | 
					    stream: T,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Delimited {
 | 
					impl<T> Delimited<T> where T: Read {
 | 
				
			||||||
	pub fn new(stream: Box<dyn Read>, delimiter: &[u8]) -> Self {
 | 
						pub fn new(stream: T, delimiter: &[u8]) -> Self {
 | 
				
			||||||
        Delimited {
 | 
					        Delimited {
 | 
				
			||||||
            stream,
 | 
					            stream,
 | 
				
			||||||
            delimiter: delimiter.to_vec(),
 | 
					            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>>;
 | 
					    type Item = Result<Vec<u8>>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn next(&mut self) -> Option<Self::Item> {
 | 
					    fn next(&mut self) -> Option<Self::Item> {
 | 
				
			||||||
@ -89,3 +89,23 @@ fn find_subslice(stack: &[u8], key: &[u8]) -> Option<usize> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    None
 | 
					    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